上一篇文章在原有的A*算法上增加了权值,解决了混合型地图的最短时间循迹问题。本篇文章我们来讨论一下A*算法,在三维地图上可行性。
目录
A算法(一):4方向
A算法(二):8方向
A算法(三):双向策略与类似算法
A算法(四):权值与混合型地图
A*算法(五):在三维地图的可行性
可行性讨论
在二维空间上,我们把地图分割成许许多多大小一致的正方格。而在三维空间,我们就得考虑高度了。于是一个三维地图就可以通过许许多多大小一致的正方体来表示。
A*算法用在三维空间无非就是把高度也考虑进去。但是在二维空间里,方格最多只要考虑8个方向,而三维空间的方块最多得考虑26个方向(3*3*3 - 1),这对于一般的遍历算法来说,工作量是巨大的。
为了减少遍历,我们可以尝试做出一定的牺牲。
第一种策略是减少遍历方向,之前的文章我们讨论过二维地图的A*算法,4方向只能够上下左右移动,不能斜着移动,相比于8方向减少了方向的遍历。类似地,在三维空间,如果不允许斜着飞行,那么只要考虑6个方向就可以了,如下图。
第二种策略是减少粒度,如下图,右边的图片像素个数从 500 * 300 减少到 250 * 150。遍历全像素次数大大减少,但代价是图片变模糊了。
类似的一个三维空间由原来的100 * 100 * 100表示,改用 75 * 75 * 75来表示,遍历次数就减少了,但代价就是精确度降低。
或许同时使用上述两种策略会有不错的效果。
如果A*算法在三维空间可行,那么上一篇文章讲到的基于权值的混合型地图路径规划也就不成问题了。
例如下图,灰色方块为障碍物,绿色为无风区域(权值为1),红色为微风区域(权值为10),紫色为大风区域(权值为100),很显然,天蓝色的飞行路径耗时最短。黄色路径虽然距离最短但由于经过了大风区域(权值为100),耗时大大增加。