如何在没有节点或单元的无网格 2D 平面上实现 A* 算法?我需要物体能够绕过目标途中相对较多的静态和移动障碍物。
我当前的实现是在对象周围创建八个点,并将它们视为假想的相邻正方形的中心,这些正方形可能是对象的潜在位置。然后我计算每个函数的启发式函数并选择最佳的。起点和移动点之间、移动点和目标之间的距离我用毕达哥拉斯定理按正常方式计算。问题是,通过这种方式,物体通常会忽略所有障碍物,甚至更经常会卡在两个位置之间来回移动。
我意识到 mu 的问题可能看起来多么愚蠢,但我们将不胜感激。
以适合您的问题的任何分辨率创建一个假想网格:尽可能粗粒度以获得良好的性能,但足够细粒度以找到障碍物之间的(所需的)间隙。您的网格也可能与带有障碍物对象的四叉树相关。
在网格上执行 A*。网格甚至可以预先填充有用的信息,例如接近静态障碍物。一旦你有了沿着网格方块的路径,只要路径中有拐点,就可以将该路径后处理为一系列路径点。然后沿着航路点之间的线路行驶。
顺便说一句,您不需要实际距离(参见您提到的毕达哥拉斯定理): A* 可以很好地与estimate的距离。曼哈顿距离是一个流行的选择:|dx| + |dy|
。如果您的网格游戏允许对角线移动(或者网格是“假的”),只需max(|dx|, |dy|)
可能就足够了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)