A*寻路入门
2015-06-22 23:13
260 查看
基本概念
a*实现算法很多,下文仅以启发式算法为例
公式 F = G + H ,h为当前点至目标点消耗(距离),g为起始点至当前点的消耗(距离) , F为代价
主要做两件事
一.生成导航图
二.计算代价,寻找最少代价的路径
1.生成导航图
a.根据地图的宽度高度决定不同网格尺寸与网格密度
b.检测地图中需要碰撞的物体
2.导航图(图中白点)已生成
a.下面是计算并寻找最小代价路径
定义 开启集合
定义 关闭集合
定义 当前点
将起始点添加到开始集合中
While(开始集合包含至少一个node){
当前点 =开启集合中最小的F值的点
当前点点移除开启集合中
当前点点加入关闭集合中
如果当前点是目标点 结束查询
遍历当前点的每个相邻点
如果相邻点不能访问或则相邻点在关闭集合中,则跳过此相邻点
如果新的路径到相邻点的距离更短(H),或者相邻点不在开启集合中
重设F值
重设其父节点为当前点
如果相邻点不在开启集合中
添加相邻点到开启集合中
}
b.得到关闭集合,与当前点,此时当前点等于目标点,通过回溯当前点可以得到下图,黑色为最终路径,黄色区域为探索过的区域
a*实现算法很多,下文仅以启发式算法为例
公式 F = G + H ,h为当前点至目标点消耗(距离),g为起始点至当前点的消耗(距离) , F为代价
主要做两件事
一.生成导航图
二.计算代价,寻找最少代价的路径
1.生成导航图
a.根据地图的宽度高度决定不同网格尺寸与网格密度
b.检测地图中需要碰撞的物体
2.导航图(图中白点)已生成
a.下面是计算并寻找最小代价路径
定义 开启集合
定义 关闭集合
定义 当前点
将起始点添加到开始集合中
While(开始集合包含至少一个node){
当前点 =开启集合中最小的F值的点
当前点点移除开启集合中
当前点点加入关闭集合中
如果当前点是目标点 结束查询
遍历当前点的每个相邻点
如果相邻点不能访问或则相邻点在关闭集合中,则跳过此相邻点
如果新的路径到相邻点的距离更短(H),或者相邻点不在开启集合中
重设F值
重设其父节点为当前点
如果相邻点不在开启集合中
添加相邻点到开启集合中
}
b.得到关闭集合,与当前点,此时当前点等于目标点,通过回溯当前点可以得到下图,黑色为最终路径,黄色区域为探索过的区域
相关文章推荐
- 如何查看一个进程打开哪些fd及对应的文件或套接字操作
- 站立会议第九天
- 第一阶段冲刺站立会议报告四(补)
- windbg - Byakugan
- CUDA系列学习(一)An Introduction to GPU and CUDA
- 你的灯亮着吗阅读笔记之一
- CUDA系列学习(一)An Introduction to GPU and CUDA
- 人月神话阅读笔记之三
- 怎么在程序中使用代码调用iphone打电话功能
- (转)Eclipse RCP 插件开发中经常调用的几个方法
- C预处理器和C函数库
- 站立会议第八天
- 第一阶段冲刺站立会议报告三(补)
- .NET跨平台:在Mac上跟着错误信息一步一步手写ASP.NET 5程序
- 导入表 与 IAT
- 10.MyBatis 延迟加载,一级缓存,二级缓存 设置
- 关于oracle数据库索引的一些学习记录
- 站立会议第七天
- break&continue
- 站立会议第六天