给定一个开始和目标,如何找到导航网格中最短的方式?

时间:2016-03-19 04:15:28

标签: c++ graph path-finding a-star navmesh

我用google搜索"导航网格上的A *算法"只是为了得到错误的估计g值的方法,比如这个

enter image description here

或者这个 enter image description here

通过总计蓝线段的长度,我们得到g值,但它被高估了(g值应该被低估)。此算法将返回优化路径,但不保证最短路径。

我能想到的唯一方法是根据导航网格绘制可见性图。但这会花费太多内存。

enter image description here

还有其他方法可以计算导航网格中的最短路径吗?

1 个答案:

答案 0 :(得分:2)

要获得距离您的意思更近的最短路径,您应该停止使用固定点作为A-star节点,即停止使用三角形中心或三角形中心。

尝试在A星传播时移动点。 例如,在三角形的边缘使用A星形节点:

  • 下一个A-star节点的三角形边缘与前一个A-star节点形成的线段和目的地的交点

  • 或上一个交点的最近点,位于下一个A-star节点的三角形边缘

或者,尝试使用类似标准在计算A-star之后更改路径节点。

请注意,这将平滑最终路径(如图纸上的红线)。 但这只会有助于减少高估,这并不能保证找到最短的路径。

更好的是,尝试使用字符串拉动a.k.a漏斗算法,在使用三角形中心计算你的A-star之后更改路径节点。这将为您提供通过A-star输出路径所经过的三角形的最短路径。