В настоящее время у меня есть случайная точка, создаваемая из Random. Я пытаюсь проверить, является ли данная случайная точка слишком близкой к любым другим существующим точкам на плоскости, если она находится достаточно далеко от ВСЕХ других точек, она будет добавлена в список других точек. Я начинаю с одной заданной точки, и первые измеченные точки в списке генерируются таким образом. Моя проблема заключается в том, что когда я иду, чтобы нарисовать все точки в списке на экране, часто точки намного ближе, чем им должно быть позволено.Как найти ближайшую точку (точку (x, y), в списке разных точек) до заданной точки?
public void generateFirstMap()
{
int count = 0;
do
{
int randXpixels = Main.rand.Next(24, Main.screenWidth - 16); //leave outer 16 pixels of screen empty (planet sprite has diameter of 8 pixels)
int randYpixels = Main.rand.Next(27, Main.screenHeight - 27);
Tuple<int, int> coord = Tuple.Create(randXpixels, randYpixels);
if (distance(closestPoint(coord), coord) < 200)
{
continue;
}
points.Add(coord); //List<Tuple<int,int>> points;
count++;
} while(count < 100);
public Tuple<int, int> closestPoint (Tuple<int, int> p1)
{
Tuple<int, int> p2 = Tuple.Create(0, 0);
bool firstRun = true;
foreach (Tuple<int, int> point in points)
{
if (firstRun)
{
p2 = point;
firstRun = false;
}
else if (distance(p1, p2) < distance(p1, point))
{
p2 = point;
}
}
return p2;
}
public double distance(Tuple<int, int> p1, Tuple<int, int> p2)
{
Vector2 line = new Vector2((p2.Item1 - p1.Item1), (p2.Item2 - p1.Item2));
return Math.Abs(line.Length());
}
Edit: быть ясно, число для того, как близко они могут быть просто номер, я бросил там (сейчас) это может быть что угодно> ~ 30
Edit2: Изменены все кортежи Vector2 и используемый предложенный код, все еще не изменили проблему
Редактирование 3: Использование цикла for для циклического перемещения по всем точкам (внутри циклов while) и с использованием прерывания, похоже, устранило проблему.
Почему вы используете 'Tuple' вместо 'Point' или вашего класса' Vector2'? –
Как выглядит расстояние? –
Я не знаю, что класс 'Vector2' ... является' line.Length() ', что вы думаете, или он всегда возвращает 2? – CompuChip