#morton #index #level #indices #depth #quad-tree #space-filling-curve

mor-ton索引用户结构

用于高效且轻松处理Morton索引的类型和函数

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