#hilbert-curve #hilbert #algorithm #curve

zhang_hilbert

基于张等人撰写的“任意大小数组的伪希尔伯特扫描”生成任意大小的伪希尔伯特扫描

2个版本

0.1.1 2019年2月26日
0.1.0 2019年2月26日

#1342算法

Download history 31/week @ 2024-03-29 4/week @ 2024-04-05 6/week @ 2024-04-12 141/week @ 2024-04-19 103/week @ 2024-05-31 16/week @ 2024-06-07 3/week @ 2024-06-14

122 每月下载量

MIT/Apache

43KB
649

zhang_hilbert

docs.rs

此crate提供迭代器类型,根据张等人撰写的“任意大小数组的伪希尔伯特扫描”生成任意大小的伪希尔伯特扫描。

use zhang_hilbert::ArbHilbertScan32;
for [x, y] in ArbHilbertScan32::new([11, 42]) {
    assert!(x >= 0 && y >= 0 && x < 11 && y < 42);
    println!("{:?}", [x, y]);
}

与原始算法的不同

最后的E_B(E, O)

此实现为E_R(E, O)矩形中的最后E_B(E, O)块使用不同的曲线类型选择规则。这使得在更多情况下离开点固定在已知点,使得输出适合铺砖。

cargo run --example hilbertgen -- -a zhang 6 7
  ,---, ,---,        ,---, ,---,
  '-, '-' ,-'        '-, '-' ,-'
  ,-' ,-, '-,        ,-' ,-, '-,
  '-, | '---'        '-, | '---'
  ,-' '-, ,--        ,-' '-----,
  '-, ,-' '-,        '-, ,-----'
  --' '-----'        --' '------
   Original      This implementation

cargo run --example hilbertgen -- -a zhang 4 3
    ,------           ,-----,
    '-----,           '-, ,-'
    ------'           --' '--
   Original      This implementation

宽高比有界的铺砖

该算法接受任何矩形大小,但随着矩形比例偏离正方形,输出质量会下降。ArbHilbertScanCore通过将矩形分成多个比例更接近正方形的矩形来改进它(因此它们的宽高比是有界的)。

$ cargo run --example hilbertgen -- 40 7
,---, ,---, ,---, ,---, ,---, ,-, ,---, ,---, ,---, ,---, ,-, ,---, ,---, ,---,
'-, '-' ,-' '-, '-' ,-' '-, '-' '-' ,-' '-, '-' ,-' '-, '-' '-' ,-' '-, '-' ,-'
,-' ,-, '-, ,-' ,-, '-, ,-' ,-, ,-, '-, ,-' ,-, '-, ,-' ,-, ,-, '-, ,-' ,-, '-,
'-, | '---' '-, | '---' '---' | | '---' '-, | '---' '---' | | '---' '-, | '---'
,-' '-----, ,-' '-----, ,-----' '-----, ,-' '-----, ,-----' '-----, ,-' '-----,
'-, ,-----' '-, ,-----' '-----, ,-----' '-, ,-----' '-----, ,-----' '-, ,-----'
--' '---------' '-------------' '---------' '-------------' '---------' '------

$ cargo run --example hilbertgen -- -a zhang 40 7
,-----------------------, ,-, ,-, ,-, ,-, ,-, ,-, ,-, ,-, ,-, ,---------------,
'---------------------, '-' '-' '-' '-' '-' '-' '-' '-' '-' '-' ,-------------'
,---------------------' ,-, ,-, ,-, ,-, ,-, ,-, ,-, ,-, ,-, ,-, '-------------,
'-----------------------' '-' '-' '-' '-' '-' | | '-' '-' '-' '---------------'
,---------------------------------------------' '-----------------------------,
'---------------------------------------------, ,-----------------------------'
----------------------------------------------' '------------------------------

division函数

为高效实现,修改了division函数。因此,它对输入3⋅2ⁿ产生不同的输出。

许可证:MIT/Apache-2.0

依赖关系

~480KB