Crate pi_path_finding

Crate pi_path_finding 

Source
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