3 个版本
0.1.2 | 2022 年 4 月 4 日 |
---|---|
0.1.1 | 2022 年 4 月 3 日 |
0.1.0 | 2022 年 3 月 17 日 |
#997 in 算法
225KB
549 行
警告
此库处于开发阶段的 alpha 阶段。其接口可能随时更改。
有关迁移说明,请参阅: https://github.com/alexmadeathing/insides/releases
insides
一个紧凑、高性能的空间填充曲线库,适用于 Rust。
此库提供了一般化与空间填充曲线交互的抽象接口,以及 morton 曲线实现和相应的操作方法。
支持的曲线
- Morton - 一个 morton 或 Z-order 曲线实现
我们目前仅支持 Morton 编码,但接口将支持其他曲线实现,例如 Hilbert,我们计划很快包含它们。
功能
- 高性能 - 可用于性能敏感的环境中
- N 维 - 适用于多维应用(在特定条件下可达 16 维)
- 类型安全 - 支持多种输入类型和已知输出类型(支持
u8
、u16
、u32
、u64
、u128
、usize
) no_std
- 适用于嵌入式设备(可通过std
功能启用额外的标准库功能)- 可扩展 - 基于灵活特质的实现
- 最小依赖 - 发布构建仅依赖于 dilate 进行整数膨胀
入门
首先,将insides链接到您的项目的cargo.toml文件中。
请访问crates.io查看最新版本
[dependencies]
insides = "0.1.2"
接下来,将insides导入到您的项目中,并尝试一些功能
use insides::*;
// Create a 3D morton location using u16 coordinate indices
// At the moment, we have to specify the number of dimensions twice, sorry!
// (this will change with improvements to Rust const generics)
let location = Morton::<Expand<u16, 3>, 3>::from_coords([1, 2, 3]);
// Access raw morton location index
// Useful as a map key or array index!
// In this case, we're using a morton curve, so we know the underlying bit
// layout. If we used a different type of curve, the index would be
// different.
assert_eq!(location.index(), 0b110101);
// Get neighbour in the negative X axis
assert_eq!(location.neighbour_on_axis(0, QueryDirection::Negative).coords(), [0, 2, 3]);
// Get neighbour in the positive Y axis
assert_eq!(location.neighbour_on_axis(1, QueryDirection::Positive).coords(), [1, 3, 3]);
// Get sibling on Z axis
// Its use is subtle and may not be apparent at first glance. Imagine the
// world is divided into a grid where each cell contains a cluster of 8
// siblings (in the 3D case). This method operates upon that grid. This is
// mostly useful when applied to tree-like structures.
let sibling = location.sibling_on_axis(2);
assert_eq!(sibling.coords(), [1, 2, 2]);
// Calling again from the sibling gets our original location
assert_eq!(sibling.sibling_on_axis(2), location);
// This gets, either the sibling, or the same location, on the Z axis,
// depending on which is further in the query direction.
assert_eq!(location.sibling_or_same_on_axis(2, QueryDirection::Positive).coords(), [1, 2, 3]);
获取更详细的信息,请参阅代码参考。
路线图
请参阅V1.0路线图讨论。
贡献
欢迎贡献。
对于错误报告,请提交错误报告。
对于功能请求,请提交功能请求。
如果您有想法并希望直接贡献,请先在讨论区创建一个想法讨论。在着手工作之前,允许他人进行评论。当所有各方在设计上达成一致后,工作可以开始。当您的代码准备好发布时,请提交一个引用您的想法讨论的pull request。除非是非常小的更改,否则我们不太可能接受未经过此过程的pull request。
许可
insides在反资本主义软件许可证(v 1.4)下授权。这意味着对于不按照资本主义原则运营的个人和组织,它是免费和开源的。
除非明确说明,否则您的贡献将根据此许可证合并。