【发布时间】:2016-03-19 04:15:28
【问题描述】:
我在 Google 上搜索了“导航网格上的 A* 算法”,结果却得到了估计 g 值的错误方法,就像这样
通过总结蓝色线段的长度,我们得到了g值,但它被高估了(g值应该被低估了)。这个算法会返回一个优化的路径,但不保证是最短的。
我能想到的唯一方法是根据导航网格绘制可见性图。但这会消耗太多内存。
还有其他方法可以计算导航网格中的最短路径吗?
【问题讨论】:
-
我认为您应该多研究 A* 算法,尤其是它做出的假设和提供的保证。这样,您还可以提出更有意义的问题。例如,您的问题没有准确定义您认为 A* 输出的错误之处。
-
@UlrichEckhardt A* 是对的,但我不能直接将 A* 算法应用于网格导航图。A* 需要具有节点和边的典型图,以便它可以应用类似 Dijkstra 的搜索找出最短路径。搜索完成后,没有路径可以比现在返回的路径短。但是导航网格不是只有节点和边的图形,它由可通行的区域组成,所以我用谷歌搜索了如何应用导航网格上的 A*。
-
那些文章要么将通过所有多边形质心的曲折路径或通过所有边的中点的曲折路径视为 g 值。但这是错误的,这种 g -value 高估了从起点到当前多边形(或边)的距离。所以当搜索完成时,所有未检查的路径都被高估并放弃了。
-
所有路径长度都被高估了,没有人知道任何未经检查的路径的下限。所以除非我们检查所有可能的路径,否则总是存在比我们已知的路径更短的路径。跨度>
-
对不起我的英语不好。
标签: c++ graph path-finding a-star navmesh