3个版本 (破坏性更新)
0.3.0 | 2024年6月20日 |
---|---|
0.2.0 | 2022年8月23日 |
0.1.0 | 2022年3月21日 |
#745 in 数据结构
240KB
4.5K SLoC
mor-ton索引用户结构
- 用于处理Morton索引的Rust库
此库允许在Rust代码中处理Morton索引。Morton索引为n元树(2D中的四叉树,3D中的八叉树等)的节点提供了一维映射。以下是此库的关键特性概述
- 2D和3D的Morton索引(未来将添加更多维度),提供典型的Morton索引排序。对一组2D Morton索引进行排序,你就得到了一个四叉树;在3D中做同样的操作,你就得到了一个八叉树!
- 从一组单元(2D中的
Quadrant
,3D中的Octant
)简单创建Morton索引 - Morton索引和N维网格内索引之间的转换。这可以用来轻松计算边界框内点的Morton索引
- 使用不同的命名方案将Morton索引转换为字符串
- 不同的存储类型,可以精确控制Morton索引应有多少层以及应占用多少内存。还可以定义是否需要一个具有动态层数的Morton索引或固定层数的Morton索引。使用
StaticStorage
样式,也可以在不使用动态分配的情况下实现动态层数!
示例
// Create a Morton index with 8 bits of fixed-depth storage, so a fixed depth of 4
let mut fixed_index = FixedDepthMortonIndex2D8::try_from([
Quadrant::Zero,
Quadrant::One,
Quadrant::Two,
Quadrant::Three,
])?;
assert_eq!(4, fixed_index.depth());
// Access cells by their level
assert_eq!(Quadrant::One, fixed_index.get_cell_at_level(1));
// Or get an iterator over all cells, starting at the root of the quadtree
assert_eq!(Some(Quadrant::Three), fixed_index.cells().last());
// You can also create a Morton index from an index in a regular grid
assert_eq!(
fixed_index,
FixedDepthMortonIndex2D8::from_grid_index(Vector2::new(5, 3), QuadrantOrdering::XY),
);
有关更多示例,请参阅示例文件夹。
依赖关系
~3.5MB
~75K SLoC