AI寻路使用2D多边形而不是航点 - 是否有推荐的算法?

时间:2014-06-21 19:46:30

标签: artificial-intelligence path-finding

我试图在一系列凸多边形而不是路点上使用路径查找。为了使这更加复杂,多边形由用户制作,并且可能具有不一致的顶点。例如:

http://i.stack.imgur.com/vgzX3.png

我们知道物体是Y深X宽,并且多边形在某些位置具有顶点。是否有一种特定的算法可以找到最快的目标方式,同时保持整个对象在多边形中(如果我理解正确,A *只适用于航点)?如何处理不是同一个对象但位于同一位置的顶点?

编辑:多边形是凸的;它是2个独立的多边形,边缘在线上。 另外,如何实现*寻路,因为基于节点的系统不会在无限的情况下工作。分辨率多边形?

2 个答案:

答案 0 :(得分:4)

通常,所有最短路径段都将具有多边形顶点或起点和目标点作为终点。如果构建一个包含所有这些段的图形(从开始到每个“可见”多边形顶点,从目标到每个“可见”多边形顶点,从每个多边形顶点到每个其他多边形顶点)并在其上运行A * ,你有最佳路径。为A *构建图表的成本是:

  • 对于每个顶点,用于查找可见顶点的可见性测试:简单算法(对于每对顶点,查看从一个到另一个的段是否位于多边形内)是O(n ^ 3)。构建凸多边形并独立处理它们,或使用更智能的“径向扫描”算法可以大大降低这一点,但我怀疑它仍然在O(n ^ 2)附近。
  • 对于每个查询(从起点到目标点),可见性测试的O(n)找到它可以看到的所有顶点。

如果您只打算申请A *一次,那么为单次遍历构建A *图的固定部分的价格可能会有些陡峭。另一种方法是在使用时逐步构建图形:

illustrated example

可以找到实现上述方法的Java代码here

答案 1 :(得分:2)

绘图中的多边形不是凸面。对于凸多边形,您可以在每个边的中间放置一个路点,然后应用A *。当然,您需要修复不一致的顶点。

相关问题