请花一点时间了解我的情况。如果不能理解,请在评论中告诉我。
我有一个航点的 ArrayList。这些航点没有任何顺序。航点具有以下属性:
{int type, float z, float y, float x, float rotation}
这适用于 3 维世界,但由于我的寻路不应该关心高度(因此将世界视为 2 维世界),因此忽略 y 值。旋转对于这个问题并不重要。
- 在这个二维世界中,x 代表 x 轴,z 代表 y 轴。
- 如果 x 增加,则世界中的物体向东移动。如果 x 减小,则世界中的物体向西移动。
- 如果 z 增加,则世界中的物体向北移动。如果 z 减小,则世界中的物体向南移动。
因此,这些“新”航点可以简化为waypoint = {float x, float y}
:
现在,这些航路点代表对象的 X 轴 (x) 和 Y 轴 (z) 位置。此外,还有一个当前位置:curLocation = {float x, float y}
和一个目标位置:tarLocation = {float x, float y}
。
这就是我想要得到的:在以下严格条件下将导致从到的
所有航路点组合(又名:路径或路线) :curLocation
tarLocation
- 每个航路点之间的距离不得大于
(float) maxInbetweenDistance
。这包括从到第一个航路点的初始距离curLocation
和从最后一个航路点到 的距离tarLocation
。如果不可能有这样的航路点组合,则应返回 null。 - 当
maxInbetweenDistance
从通向目标航路点的航路点中找到多个航路点时,应选择最近的航路点(如果稍微远一点的替代航路点会导致一条距离更长的新路径也返回)。 - 返回的航路点组合(路径)的顺序应该是从最短路线(最小距离)到最长路线(最大距离)
最后,请考虑以下几点:
- 这是我唯一需要明智地进行 AI/寻路的事情,这就是为什么我不希望使用完整的寻路或 AI 框架。我相信一个功能应该能够处理上述问题。
- 如果返回所有可能的航路点组合会导致过多的开销,那么如果可以指定最大数量的组合(但仍然从最近到最远排序)也很好。例如。5 个最近的路径。
我将如何实现这一目标?任何反馈表示赞赏。