gpt4 book ai didi

c# - 如何找到到给定点的最近点(点是(x,y),在不同点的列表中)?

转载 作者:行者123 更新时间:2023-11-30 14:53:29 25 4
gpt4 key购买 nike

目前我有一个从 Random 生成的随机点。我正在尝试检查给定的随机点是否离平面中任何其他现有点太近,如果它离所有其他点足够远,它将被添加到其他点列表中。我从一个给定的点开始,列表中的第一个 hundered 点就是这样生成的。我的问题是,当我将列表中的所有点绘制到屏幕上时,这些点通常比允许的距离要近得多。

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

编辑:明确地说,它们之间的接近程度只是我抛出的一个数字(目前),它可以是任何 >~30

Edit2:将所有元组更改为 Vector2 并使用了建议的代码,仍然没有改变问题

编辑 3:使用 for 循环遍历所有点(在 while 循环内)并使用 break 似乎解决了问题。

最佳答案

这应该做:(需要您删除所有元组并将它们替换为 Vector2 类型,这通常更有意义。您还想调整您的命名。

public Vector2 GetClosestPoint (Vector2 v1)
{
return points.OrderByDescending(v2 => GetDistance(v1,v2)).First();
}

关于c# - 如何找到到给定点的最近点(点是(x,y),在不同点的列表中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29094472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com