我必须得到2D中两点之间的(最短)/(最佳)距离。我必须避免可能连接在一起的线条形状。关于如何表示我可以旅行的节点的任何建议?我曾想过制作一个网格,但这听起来不太准确或优雅。如果一条线的任何一点在一个正方形内(节点是正方形的中心),我会认为一个节点是不可行的。
一个例子是从A点到B。
网格是推荐的解决方法吗?非常感谢!
答案 0 :(得分:5)
我认为这实际上是Larsmans的回答更多的算法:
图表的节点是障碍物顶点。每个内部顶点实际上代表两个节点:凹面和凸面。
如果在障碍物中有“T”交汇点之类的东西,你必须做额外的预处理工作,我不会惊讶地发现它在许多情况下会中断。您可以通过仅考虑位于当前节点和目标之间的连接组件的顶点来使事情变得更快。
因此,在您的示例中,在首次尝试 A,B 之后,您将推送 A,8 , A,5 , A,1 , A,11 , A,2 。考虑的第一个节点是 A,8 , A,1 和 A,5 ,但它们无法离开并且他们可以到达的节点已经被推入队列,累积距离更短。 A,2 和 A,11 将被考虑,事情将从那里开始。
答案 1 :(得分:4)
我认为您可以通过定义为:
的图表上的A *搜索来解决此问题即,没有必要将平面离散化为网格,但没有它,后继功能就很难定义。
答案 2 :(得分:2)
一个网格,通过它的A *是要走的路。我所知道的所有游戏都使用A *或者它适用于全球路线,并通过转向行为来补充本地准确性。也许您并不知道使用转向行为会解决您对准确性的所有顾虑(搜索引擎)。
编辑:我只记得一个使用流场的策略游戏。但它不是主流。BTW:要了解转向行为对您的对象的影响,请查看有关它的许多YouTube视频。他们中的一些人在更广泛的意义上使用术语路径寻找:包括全局算法(A *)以及碰撞避免,路径平滑和转向行为中涉及的物体惯性。