Expand description
寻路 模块
finder A* 主体
tile_map 模块,实现了方格数据的A*寻路;
nav_mesh 模块,实现了 3维导航网格的A*寻路(包含路径拉直)
Modules§
- base
- 用平面整数坐标点来表达的角度,用n倍4象限来表示大于360度的角度。
- bresenham
- Bresenham直线算法
- finder
- A寻路算法–抽象实现
给定一组代表全图的通用节点
nodes,以及寻路的起始节点在nodes的索引start和目的节点在nodes索引end进行A 寻路; 如果寻路到终点 或 寻路的结果节点数目超过max_number,则终止寻路并返回结果; 注意:如果 from-to 的代价不对称,那么A算法的结果可能不是最优的 传统A算法中,open堆很容易过大, 放入节点和弹出节点都会很慢 优化版的实现,增加一个节点邻居NodeNeighbors,这个节点邻居代表一个节点的全部邻居,可以从中取出最优邻居节点, 将NodeNeighbors放入open表,这样可以大大缩小open表的大小。 寻路时,步骤1、创建起点的节点邻居nn。 步骤2、弹出nn中的最优邻居节点node,判断是否到达,如果没有到达,则获取该node的节点邻居nn1,如果open表不为空,从表头取最优的节点邻居nn2,比较nn2、nn1和nn,选择放入nn1或nn, 获得最优的新的nn。 重复该步骤2。 支持双端寻路,双端寻路一般比单端寻路速度快。如果 from-to 的代价不对称,则应该使用从起点出发的单端寻路 - nav_
mesh - 导航网格 的 A* 寻路
- normal
- 标准A*算法需要的节点条目和创建节点邻居的函数
- tile_
map - A*寻路的瓦片地图 需指定行数和列数,每个瓦片的边长和斜角长度,默认为100和141。 瓦片信息包括3个信息:瓦片是否障碍, 右边是否障碍,下边是否障碍。这些是从左到右,从上到下地进行排序的。一个矩阵表示的地图也称为瓦片地图。 获得邻居时, 如果斜向对应的两个直方向的瓦片有1个不可走,则该斜方向就不可走。 如果使用PathSmoothIter来平滑路径,则斜向对应的两个直方向的瓦片有1个不可走,则该斜方向就不可走。
- web