2个不稳定版本
0.2.0 | 2021年7月31日 |
---|---|
0.1.0 | 2021年7月25日 |
#950 in 游戏开发
37 每月下载量
24KB
261 代码行
N维度的摩尔邻域(8连通)
一个用于生成任意范围和维度摩尔邻域(即网格中单个单元格的周围单元格)索引的微小 no_std
库。或者,蓝色中心方块的红色边缘方块
以下是上述示例中 moore!
宏生成的结果,一个二维网格,邻域大小(范围)为 1
。
fn example() {
let neighborhood = moore!(1, 2);
assert_eq!(neighborhood, [
[-1,-1], [ 0,-1], [ 1,-1],
[-1, 0], [ 1, 0],
[-1, 1], [ 0, 1], [ 1, 1]
]);
}
请参见下面的更多用法示例。
使用库与 std
和 no_std
要在常规环境中使用库,将以下内容添加到您的 Cargo.toml
[dependencies]
moore-neighborhoods = "0.2"
要在 no_std
环境中使用库,使用以下替代方案
[dependencies]
moore-neighborhoods = { version = "0.2", default-features = false }
这将禁用所有基于 Vec
的函数,即您将想要使用 moore!
宏来获取索引。
用法示例
使用 moore!
宏,当维度和范围都是静态已知时
use moore_neighboorhood::moore;
fn example() {
let mut result: [[isize; 2]; 8] = moore!(1, 2);
let mut expected = [
[-1,-1], [ 0,-1], [ 1,-1],
[-1, 0], [ 1, 0],
[-1, 1], [ 0, 1], [ 1, 1]
];
assert_eq!(result, expected);
}
当需要动态大小时
use moore_neighboorhood::dynamic::moore;
fn example() {
let mut result: Vec<Vec<isize>> = moore(1, 2);
let mut expected = [
[-1,-1], [ 0,-1], [ 1,-1],
[-1, 0], [ 1, 0],
[-1, 1], [ 0, 1], [ 1, 1]
];
result.sort();
expected.sort();
assert_eq!(result, expected);
}
当维度是静态已知但范围可能改变时
use moore_neighboorhood::generic_dimension::moore;
fn example() {
let mut result: Vec<[isize; 2]> = moore(1);
let mut expected = [
[-1,-1], [ 0,-1], [ 1,-1],
[-1, 0], [ 1, 0],
[-1, 1], [ 0, 1], [ 1, 1]
];
result.sort();
expected.sort();
assert_eq!(result, expected);
}
许可证
该项目受MIT许可证的许可(有关更多信息,请参阅LICENSE 文件)。代码是从 Hugh Kennedy 编写的 hughsk/moore 移植的,并针对 Rust 功能(如const generics)进行了调整。