找到距离其他点最远的点

时间:2013-06-16 21:36:14

标签: algorithm distance point

我正在尝试为'逃离'创建一个算法,并希望首先找到'安全'的点。也就是说,它们与其他点相对较远的点。

这是2D(并不重要),并且发生在固定大小的圆圈内。

我猜测平方距离的总和会产生一个良好的起始方程,其中最高分是最远的。

至于拾取点数,我认为不可能求解X,Y但近似就足够了。

我做了一些阅读,并确定为了覆盖圆形区域,你需要7个半角圆(中心形成一个十六进制,第七个在中心)

我可以遍历这些,所有这些都在圈内开始。当我选择最好的得分球时,我可以继续将它们划分为7个球。当然,不包括任何超出原始圈子的点。

然后我可以迭代到所需的精度或所需的水平。

为了扩展这种方法,假设是到达一个位置需要时间,而位置可能是安全的,其间的旅行可能不是。我应该如何在等式中加入距离,以便我得到一个好的解决方案。

我想我可以将距离平方到新点并将其乘以得分,并从那里迭代。它会强烈支持当地的一个地方,但我认为这是一个很好的行为。它会尝试解决附近的安全点,然后重新计算它可能会发现'出局'并继续潜入安全。

对此有任何想法,或者之前已经解决了这个问题?当我看的时候,我无法专门找到这个问题。

编辑:

Voronoi using Fortune's Algorithm

我引入了Fortune算法的C#实现,并在我的点周围添加了几个点来创建一个伪循环约束,因为我不太了解该算法以便手动调整它。

我现在意识到蓝线在节点之间创建了一条路径。我可以使用这些的长度和周围点之间的距离来计算路径(穿越时间和危险)并将其与安全(它试图到达的空圆圈)进行权衡以确定什么是最佳路线行动。通过玩这些互动的方式,我可以简单地通过使用voronoi来消除我不得不做的大部分工作。此外,我的产卵算法现在将使用它来确定LEC并在该点产生。

1 个答案:

答案 0 :(得分:0)

您可以使用您的一组位置的convex hull - 凸包的顶点将为您提供“最远”点的集合。接下来,取出你要逃离的点的centroid,然后确定凸包的哪个顶点距离质心最远。您可以通过将比赛场划分为象限来加快速度 - 您只需要测试最近象限中的顶点(例如,如果质心位于正x正y象限中,那么你只需要检查负-x负-y象限中的顶点);如果比赛场地是不规则的形状,那么这可能不是一个选择。

作为逃离到最远点的另一种选择,如果你有一个逃离的起点(例如你逃离的点是敌人,而玩家角色目前在X点,表示其起点,然后让玩家逃到最远点,而不是让玩家跟随最快速从敌人的质心中取出它们的轨迹 - 从敌人的质心通过玩家的位置画一条光线,并且那条射线为你提供了玩家应该逃离的方向。

如果玩家角色被包围,那么这两种算法都会产生无意义的结果,但在这种情况下,玩家角色无论如何都没有任何可行的选择。