本文目的是对A*寻路算法所生成的路径进行一些人性化的调整,使其看起来不至于太机械化。关于A*算法的原理与实现,读者可以阅读其他资料,这里不再详细阐述。
如何写估价函数
A*寻路算法本质上是一个有方向性的广度优先搜索算法,它使用一个估价函数,来估测可能的最短路径,在每一次搜索迭代完成后,选取其邻接点中最优的一个(即,距离终点最近的一个点),作为下一次迭代的起点。如此反复,直到找到终点。下面先列出估价函数的常规写法:
设i点到起点的价值为S,到终点的估价为E,i点的总估价G等于S+E。S的值是确定的:
S = parent.S + 1(i点是其父节点的水平或垂直方向上的邻接点)
或
S = parent.S + sqrt(2))(i点是其父节点斜方向上的邻接点)
E点的值需要估算。精确一点的写法:
水平距离:dx = abs(ix - ex)
垂直距离:dy = abs(iy - ey)
需要斜着走过的距离:v1 = min