2个不稳定版本
0.2.0 | 2023年3月27日 |
---|---|
0.1.0 | 2023年3月23日 |
#1633 in 算法
每月24次下载
26KB
265 行
Seastar
特性
seastar
是一个无依赖、非泛型的A*寻路算法实现。它专门设计用于操作二维网格的瓷砖,沿正方向(北、东、南、西)。
您可以在 seastar.sombia.com 查看库的实际应用。
我不一定推荐使用此库代替 pathfinding 包,但我希望有一个不同的API用于我的特定用例,以及更深入理解算法。
使用
cargo add seastar
use seastar::{astar, Point};
fn main() {
// A grid needs to be a 2D vector of `Option`s. `None` represents an
// empty tile, while `Some(())` represents a blocked tile.
let grid = vec![
vec![None, None, Some(())],
vec![Some(()), None, None],
vec![None, None, None],
];
let start = Point { x: 0, y: 0 }; // top left corner
let end = Point { x: 2, y: 2 }; // bottom right corner
// Assuming a path is found, `path` will be a `Vec<Point>` where each point is
// a step in the path from `start` to `end`.
if let Some(path) = astar(&grid, start, end) {
// ...do whatever you want with the path!
}
}
示例
如果您已克隆了 seastar
仓库,可以使用以下命令运行示例:cargo run --example<example_name>
。
示例 | 文件 | 描述 |
---|---|---|
random_30 | random_30.rs | 生成一个30x30的地图,包含随机的墙壁和一个随机的起点和终点。 |
random_100 | random_100.rs | 生成一个100x100的地图,包含随机的墙壁和一个随机的起点和终点。 |
基准测试
您可以使用以下命令运行基准测试:cargo bench
。
注意:关于基准测试的一句话:由于基准测试中的地图是随机生成的,因此结果会因运行而异。没有有效路径的地图往往是异常值,可能会严重扭曲结果,尤其是在较大的网格上。
许可证
Seastar 可根据您的选择双许可
。
依赖
~175KB