4

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

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

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

至于选择点,我认为不可能解决 X,Y 但近似值就足够了。

我做了一些阅读并确定为了覆盖一个圆圈的区域,你需要 7 个半大小的圆圈(中心形成一个六边形,第七个在中心)

我可以遍历这些,所有这些都在圆圈内。当我选择最好的得分球时,我可以继续将它们分成 7 个球。当然,不包括任何落在原圆之外的点。

然后我可以迭代到所需的精度或所需的级别。

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

我想我可以将到新点的距离平方并乘以分数,然后从那里迭代。它会非常有利于当地的景点,但我认为这是一种很好的行为。它会尝试在附近解决一个安全点,然后在重新计算后它可以找到“出局”并继续潜入安全地带。

对此有什么想法,或者这个问题以前做过吗?当我查看时,我无法专门找到这个问题。

编辑:

Voronoi 使用 Fortune 算法

我引入了财富算法的 C# 实现,并在我的点周围添加了一些点来创建一个伪圆形约束,因为我对算法的理解不够好,无法手动调整它。

我现在意识到蓝线在节点之间创建了一条路径。我可以使用这些长度和周围点之间的距离来计算路径(穿越时间和危险),并将其与安全性(它试图到达的空圆圈)进行权衡,以确定最佳路线行动。通过研究它们之间的交互方式,我可以消除我必须做的大部分工作,只需使用 voronoi。我的生成算法现在也将使用它来确定 LEC 并在该位置生成。

4

1 回答 1

0

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

作为逃到最远点的替代方案,如果您有一个要逃离的起点(例如,您要逃离的点是敌人,而玩家角色当前位于表示其起点的 X 点) ,那么与其让玩家逃到最远的地方,不如让玩家遵循最快从敌人的质心带走他们的轨迹——从敌人的质心通过玩家的位置绘制一条射线,然后该射线为您提供玩家应该逃离的方向。

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

于 2013-06-16T22:15:18.010 回答