2个版本

使用旧的Rust 2015

0.1.1 2017年2月20日
0.1.0 2017年2月18日

#14 in #neighbor

GPL-3.0 许可证

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]);

无运行时依赖项