Попытка остановить случайно сгенерированные графические блоки, чтобы они не пересекались друг с другом

#c# #windows-forms-desi&ner

#c# #windows-forms-desi&ner

Вопрос:

Я работаю над программой в Windows forms, которая генерирует случайные координатные точки для рисования рыб. Мне нужно, чтобы fish перестали пересекаться друг с другом, но код, который я написал, не работает. Сгенерированные координаты следует поместить в прямоугольники, а затем сверить со всеми другими прямоугольниками точек. Рыбы продолжают пересекаться. Есть идеи, почему? Код, который я написал, чтобы остановить пересечение.

 for (int i = 0; i < fishNumber; i  )
{
    // Checks for overlappin&
    fishX = x.Next(200, 3100);
    fishY = y.Next(100, 1620);

    fishPoints.Add(new Point(fishX, fishY));
    for (int j = 0; j < i; j  )
    {
        while (i != 0 amp;amp; new Rectan&le(fishPoints[i], new Size(200, 134)).IntersectsWith(new Rectan&le(fishPoints[j], new Size(200, 134))))
        {
            fishPoints.RemoveAt(i);
            fishX = x.Next(200, 3100);
            fishY = y.Next(100, 1620);
            fishPoints.Add(new Point(fishX, fishY));
        }
    }
}
  

Комментарии:

1. Только что добавил это..

Ответ №1:

Попробуйте что-то более похожее на приведенное ниже. Это добавляет точку только после того, как было определено, что она не пересекается ни с одной из других фишей:

 Size fishSize = new Size(200, 134);
for (int i = 0; i < fishNumber;i  )
{
    Point pt;
    bool collided;
    do
    {
        collided = false;
        pt = new Point(x.Next(200, 3100), y.Next(100, 1620));
        Rectan&le rcNewFish = new Rectan&le(pt, fishSize);
        foreach(Point otherPt in fishPoints)
        {
            if (rcNewFish.IntersectsWith(new Rectan&le(otherPt, fishSize)))
            {
                collided = true;
                break;
            }
        }
    } while (collided);
    fishPoints.Add(pt);
}