根据我对 A* 启发式和 Bresenham 算法如何工作的了解,这可能是不可能的,因为只有当前状态和目标状态被传递给启发式函数。但也许有人对这个问题有一个聪明的解决方案。
我正在使用 A* 来规划网格上的路径,并且我想要一个启发式方法,当当前状态和目标之间或下一次绕过障碍物之间有空闲空间时,它会导致最佳路径遵循 Bresenham 的线。
这里有一些图片来说明这个问题。
曼哈顿距离:
如果世界上的运动就像一个网格上的跳棋,这将是非常好的,但我最终会将 A* 路径转换为连续平面上的运动,所以这确实很好用。
欧几里得距离:
更好,但仍然不完美。注意最后的直线。对角线可以很容易地保持对角线,这就是我想要的。
我想要的是:
布雷森汉姆线被绘制到下一个转弯或目标。
我在这里找到了一个很好的资源,http ://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html,它触及了我正在寻找的东西,但似乎只适用于从开始到目标绘制 Bresenham 线。我想要的是布雷森汉姆线也被吸引到下一个绕过障碍物的转弯处。
有什么想法可以解决这个问题吗?