2个版本
使用旧的Rust 2015
0.1.1 | 2017年2月20日 |
---|---|
0.1.0 | 2017年2月18日 |
#14 in #neighbor
21KB
276 行
在未包装的2D网格上操作2D网格索引。
在尝试实现生命游戏时,我注意到与网格操作相关的许多逻辑并不是“生命游戏”本身特有的。因此,网格索引计算的这部分逻辑已经被抽象成单独的库。结果是 Ameda。
Ameda有助于回答以下问题
- 网格的最左/最右/最上/最下单元格是什么?
- 网格中特定单元格的邻居是什么?
- 哪些单元格在网格中有所有8个邻居?(因为有些只有3个邻居,有些只有5个)
- 网格4个角的索引是什么。
局限性
- 目前,网格的最小和最大尺寸分别为2x2到511x511。
- 可以使用更大的网格尺寸。但是,511x511是库所测试的尺寸。
lib.rs
:
用线性Vector表示的2D单元格网格。它可以用于需要操作网格中特定单元格集的应用程序。例如,您可以获取网格中所有最右边、最左边、中间单元格的索引集,甚至是特定单元格的邻居。它非常适合实现各种类型的细胞自动机。
示例
use ameda::GridIndex;
let grid = GridIndex::new(8, 8).unwrap();
assert_eq!(grid.right_column_indices(), &vec![7, 15, 23, 31, 39, 47, 55, 63]);
assert_eq!(grid.bottom_row_indices(), &vec![56, 57, 58, 59, 60, 61, 62, 63]);