【发布时间】:2011-08-11 08:52:15
【问题描述】:
根据我对 A* 启发式和 Bresenham 算法工作原理的了解,这可能是不可能的,因为只有当前状态和目标状态会传递给启发式函数。但也许有人对这个问题有一个聪明的解决方案。
我正在使用 A* 来规划网格上的路径,并且我想要一个启发式算法,当当前状态和目标或下一个转弯之间有空闲空间时,它会导致最佳路径遵循 Bresenham 的路线一个障碍。
这里有一些图片来说明问题。
曼哈顿距离:
如果世界中的运动表现得像网格上的跳棋,这将是非常好的,但我最终会将 A* 路径转换为连续平面上的运动,所以这确实很好。
欧几里得距离:
更好,但仍不完美。注意最后的直线。对角线可以很容易地保持对角线,这就是我想要的。
我想要什么:
布雷森汉姆线被绘制到下一个转弯或目标。
我在这里找到了一个很好的资源,http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html,它触及了我正在寻找的东西,但似乎只适用于从开始到目标绘制 Bresenham 线。我想要的是 Bresenham 线也被绘制到下一个绕过障碍物的转弯处。
对于解决这个问题的好方法有什么想法吗?
【问题讨论】:
-
你有没有为此实现过一些东西?
-
@AShelly 我尝试根据之前访问过的单元格的直线路径对 Hueritic 进行加权,但似乎没有什么能完全符合我的要求。我认为你需要彻底改变 A* 或完全使用不同的算法来解决这个问题。
-
你是否尝试过使用 Brasenham 行距如何启发式?
标签: algorithm grid line a-star bresenham