赞
踩
A* 算法的理解,请看这里:
A算法的示例程序请查看 paulQuei 。本文着重于将实际问题的数学化,并用A算法求解。源码我已经上传至Gitee,安装好git后可以直接Clone:
git clone https://gitee.com/ascloudwalker/algorithem.git
1 .问题描述:
在一个矩形区域内,已知一关键路径点,实现起点到终点的自动路径规划。规则:只能移动到X方向,或者Y方向相邻的点,不能对角线移动。
2.方法描述:
面对这个问题,我首先想到了A Star算法,下图就是示例程序中A Star算法的路径寻找过程:首先构建了一个正方形(矩形)的map,每一个坐标点用一个小矩形表示,灰色表示障碍物,规划目标是从左下角到右上角。蓝色方块表示算法在寻找路径的过程,绿色方块表示找到的路径。
本文中的问题与上述示例的差别在于:示例中的坐标是相邻的整数,数据本身就说明了各点之间的相邻关系,比如(1,2)和(2,2);而本文的问题中,坐标并不是一定相邻的,例如(1,2)和(2,4)是否能够直接连接(直接到达)需要建立新的相邻关系。于是我想到了图(graph),通过node(节点)和edge(边)来建立点的相邻关系。所以,在我的计算中,map不再是上图的矩形网格,而是下图所示的图(graph)。
除此以外:我自定义了Cost(指标)计算表达式、障碍点判断表达式。依然使用示例程序给出的A*算法结构流程,可以得到如下结果:(蓝色是算法的寻找路径过程,绿色为最终寻找的轨迹)
更多点以及增加不可用障碍点后的效果:
附:动图生成方法
程序中将每一次生成的图保存为图片(如png),再使用ImageMagick 进程处理:
magick *.png image.gif #生成gif
magick images.gif -layers Optimize dest.gif #压缩衣gif
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。