2个版本
0.1.1 | 2019年2月26日 |
---|---|
0.1.0 | 2019年2月26日 |
#1342 在 算法 中
122 每月下载量
43KB
649 行
zhang_hilbert
此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