寻找距离其他n个点最远的点

4
我正在尝试创建一个“逃避”的算法,并希望首先找到“安全”点。也就是说,与其他点相对较远的点。
这是2D的(虽然并不重要),发生在一个固定大小的圆内。
我猜测平方距离的总和会产生一个很好的起始方程,其中最高分数表示最远的距离。
至于选择点,我认为不可能解决X,Y,但近似是足够的。
我读了一些资料,确定了为了覆盖一个圆的区域,您需要7个半径为原圆1/2的圆(中心形成六角形,第七个在中心处)。
我可以遍历这些圆,所有这些圆都在圆内开始。当我选择最佳得分的球时,我可以继续将它们分成7个球。当然,排除任何落在原始圆外的点。
然后我可以迭代到所需的精度或所需的级别。
为了扩展方法,假设到达某个位置需要时间,而到达该位置的行程可能不安全。我应该如何将距离纳入方程中,以便我能够得出一个好的解决方案。
我想我可以将到新点的距离平方并将其乘以分数,然后从那里迭代。它会强烈支持一个本地点,但我想这是一个很好的行为。它将尝试解决附近的安全问题,然后在重新计算时可能会找到“出路”,并继续躲避。
对此有什么想法,或者这个问题以前做过吗?当我查看时,我无法找到这个特定的问题。
编辑:
我引入了Fortune算法的C#实现,并在我的点周围添加了一些点,以创建一个伪圆形约束,因为我不了解该算法足够调整它。
我现在意识到蓝线在节点之间创建路径。我可以使用这些路径的长度和周围点之间的距离来计算路径(穿越时间和危险),并将其与安全性(它正在尝试到达的空心圆)相权衡,以确定最佳行动方案。通过调整它们之间的交互方式,我可以消除大部分工作,只需使用Voronoi即可。此外,我的生成算法现在将使用此功能来确定LEC并在该位置生成。

1
我认为这个很相关。 - keyser
那么试图找到最大的空心球,我会得到相同的结果吗? - pcaston2
是的,我认为这就是我要找的内容,我会继续阅读。我不确定为什么它没有出现在我的搜索中,因为它几乎完全符合我输入的要求。 - pcaston2
我搜索了“最远点算法”。最重要的搜索词是“算法” :p - keyser
1个回答

0
你可以对你的位置集合取凸包 - 凸包的顶点将给出你最远的点集。接下来,计算你要逃离的点的质心,然后确定哪个凸包顶点距离质心最远。你可以通过将游戏场地分成四个象限来加快速度 - 你只需要测试在最远象限内的顶点(例如,如果质心在正x正y象限中,则只需要检查负x负y象限中的顶点);如果游戏场地是不规则形状,则可能无法使用此选项。

作为逃离最远点的替代方案,如果你有一个起点需要逃离(例如,你要逃离的点是敌人,而玩家角色当前位于表示其起点的X点),那么与其让玩家逃到最远的点,不如让玩家沿着最快将其从敌人重心带走的轨迹行动 - 从敌人重心通过玩家位置画一条射线,该射线给出了玩家应该逃离的方向。

如果玩家角色被包围,则这两种算法都会给出无意义的结果,但在这种情况下,玩家角色实际上没有任何可行的选择。


这些都是很好的建议,我正在疯狂地努力理解凸包和Voronoi图。当试图逃离可能导致未来难以逃脱的紧急情况时,可以使用这种类型的解决方案。如果他们实际上被困在中间,他们会选择攻击,而如果他们离质心非常近,他们会在寻找更安全的位置之前逃离一定距离(使用这个算法)。 - pcaston2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接