#hilbert #fractal #curve #morton #z-order #data-points #codec

无 std lindel

一个用于希尔伯特和莫顿编码和解码的crate;简单来说,就是线性化和反线性化

2 个版本

0.1.1 2021年3月26日
0.1.0 2021年3月25日

#1492算法

Download history 1449/week @ 2024-03-30 784/week @ 2024-04-06 1922/week @ 2024-04-13 1468/week @ 2024-04-20 1374/week @ 2024-04-27 756/week @ 2024-05-04 581/week @ 2024-05-11 898/week @ 2024-05-18 866/week @ 2024-05-25 1070/week @ 2024-06-01 778/week @ 2024-06-08 961/week @ 2024-06-15 1178/week @ 2024-06-22 907/week @ 2024-06-29 222/week @ 2024-07-06 69/week @ 2024-07-13

2,452 每月下载量
用于 分形分析

MIT/Apache

64KB
1K SLoC

Lindel (线性化-反线性化)

简介

lindel crate 提供了将原始无符号整数数组转换为莫顿或希尔伯特键以及反向转换的函数,通过同名的编码过程。这有助于线性化数据点,同时保留一定的局部性。

这个crate是morton-encoding crate的扩展。

入门指南

如果不需要使用lindel与nalgebra一起,只需在[dependencies]部分下插入一行

lindel = "0.1"

否则,必须将以下部分插入到项目的Cargo.toml文件中

[dependencies.lindel]
version = "0.1"
features = ["nalgebra"]

用法

原始整数

use lindel::*;
let input = 99251;
let output_1: [u8; 5] = hilbert_decode(input);
let output_2: [u32; 2] = morton_decode(input);
let input = [543u32, 23765];
let output_1 = input.hilbert_index();
let output_2 = input.z_index();

请注意,对于解码操作,必须指定输出数据类型。

use nalgebra::Point;
use nalgebra::U4;
use lindel::nalgebra_points::Lineariseable;
type FourDees = Point<u32, U4>;
let input = 26327612u128;
let pnt = FourDees::from_z_index(input);
let result = pnt.hilbert_index();

新的大 uints

lindel::create_lineariseable_data_type!(u128, 33, NewKey);
let input = [870u128; 33];
let hind = NewKey::hilbert_index(input);
let zind = NewKey::z_index(input);
let reinstated_input = hind.from_hilbert_index();
assert_eq!(input, reinstated_input);
let reinstated_input = NewKey::from_z_index(zind);
assert_eq!(input, reinstated_input);

优缺点

简单来说:如果速度比局部性更重要,请选择莫顿编码(“z索引”)。否则,您可以在任何地方自由使用希尔伯特编码。

依赖关系

~0.5–1MB
~21K SLoC