まず、座標をベクトルに格納する代わりに、std::pair
またはカスタム クラスを使用する方がよいでしょう。
struct Point
{
int x;
int y;
};
次に、次のようなランダムなポイントを生成する方法が必要です。
Point randomPoint(Point const & min, Point const & max)
{
static std::mt19937 gen;
std::uniform_int_distribution<> distribX(min.x, max.x);
std::uniform_int_distribution<> distribY(min.y, max.y);
return Point{distribX(gen), distribY(gen)};
}
次に、この生成関数を使用して、ベクトルを次のように塗りつぶすことができますgenerate_n
。
unsigned int const nbPoints = 100;
std::vector<Point> points;
std::generate_n(back_inserter(points), nbPoints,
std::bind(randomPoint, Point{0, 0}, Point{1000, 1000}));
これによりランダムな点が生成されるため、最終的に正方形や三角形になるとは限らないことに注意してください。可能性を生成したい場合は、不均一な分布を使用することもできます (座標の分布がわかっている場合)。に従う) を使用して数値を生成するか、拒否サンプリングを使用して、必要な領域にないポイントを破棄します。
三角形を生成すると、3 つのランダムなポイントが描画されます。
正方形を生成するには、正方形の対角にある 2 つの角に対応する 2 つの点を描くことができます。
などなど...どのような形状でも機能する「普遍的な」ソリューションはないと思います。