#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);
}