2个版本
0.1.1 | 2024年7月25日 |
---|---|
0.1.0 | 2023年10月20日 |
#181 in 压缩
每月133次下载
11KB
112 行
压缩单元向量
一个用于压缩单元向量的Rust库。它是某些C/C++代码的简单Rust移植。
它可以用于高效存储和传输诸如计算机图形中使用的法向量等数据。您可以使用它降低内存占用或减小磁盘上文件的大小。与三个32位浮点数相比,您可以使用单个16位无符号整数来表示单位向量。
压缩本身是有损的,因此大多数输入值在解包时将被映射到略有不同的值。对于许多用例,这种损失是可以接受的。请确保这也适用于您的用例。
入门指南
库提供低级函数来打包和解包值,以及高级“Rust化”接口。
低级接口需要手动创建查找表
let packed: u16 = cuv::pack(1.0, 0.0, 0.0);
let lut = cuv::create_lut();
let unpacked = cuv::unpack(packed, &lut);
assert_eq!(unpacked, [1.0, 0.0, 0.0]);
高级接口将为您处理查找表,并且使用起来更加方便
let input = [1.0, 0.0, 0.0];
let packed = cuv::CompUnitVec::from_slice(&input);
let unpacked = packed.get();
assert_eq!(unpacked, [1.0, 0.0, 0.0]);
原始来源
原始的C/C++代码来自Rafael Baptista,他在一篇已丢失的帖子中发表了该想法。该代码最初被描述为“单元向量到16位字转换算法”。
2013年,Rafael再次在他的博客上发布了描述和代码,网址为https://oroboro.com/compressed-unit-vectors/。
基准测试
此仓库包含一些使用Criterion.rs实现的基准测试,以在开发过程中检测性能回归。您可以使用以下命令运行基准测试:cargo bench
。