#codec #morton #fractal #curve #z-order #unsigned-integer

无需 std morton-encoding

一个用于编码和解码摩顿(Z-order)键的 crate

4 个稳定版本

2.0.1 2021年3月26日
2.0.0 2021年3月22日
1.0.1 2019年12月31日
1.0.0 2019年11月28日

算法 中排名第 791

Download history 1543/week @ 2024-03-14 1530/week @ 2024-03-21 1857/week @ 2024-03-28 1035/week @ 2024-04-04 1709/week @ 2024-04-11 1820/week @ 2024-04-18 1730/week @ 2024-04-25 1004/week @ 2024-05-02 800/week @ 2024-05-09 931/week @ 2024-05-16 1238/week @ 2024-05-23 965/week @ 2024-05-30 1065/week @ 2024-06-06 1302/week @ 2024-06-13 1021/week @ 2024-06-20 1133/week @ 2024-06-27

每月下载量 4,768
4 个 crate 使用

MIT/Apache 许可证

51KB
730

摩顿编码(Z-order 编码)

简介

morton-encoding crate 提供了方便的函数,可以将原始无符号整数数组转换为摩顿键,并通过同名的编码过程将其转换回来。该过程基本上将所有相同顺序的位分组在一起,这有助于线性化数据点,同时保持一定的局部性。

这个 crate 最初是为了进行分形分析而构建的。尽管如此,摩顿编码也可以用于其他用例,例如高效地搜索数据库。

lindel crate 是这个 crate 的扩展,还包含希尔伯特函数。

用法

对于大多数用例,morton_encodemorton_decode 函数应该足够了。它们的使用方法如下:

let input = 992;
let output: [u8; 5] = morton_decode(input);
assert_eq!(output, [2u8; 5]);
let input = [543u32, 23765];
let encoded_input: u64 = morton_encode(input);
let reassembled_input: [u32; 2] = morton_decode(encoded_input);
assert_eq!(input, reassembled_input);

有关更详细的信息以及有关其他类似 crate 的信息,请参阅 文档

优点

摩顿编码可以非常高效且无分支地计算。对于需要递归地将可用空间分割成两半的用例,它无与伦比;四叉树和八叉树就是很好的例子。

缺点

与希尔伯特编码等相比,摩顿编码通常不擅长保持局部性。此外,该 crate 仅实现了对每个坐标具有相同数量有效位的用例;对于这种情况不成立的用例,建议用户使用 lindel

依赖项

~475KB