21 个版本 (12 个破坏性更新)
0.13.0 | 2023年12月8日 |
---|---|
0.12.1 | 2023年11月19日 |
0.11.0 | 2023年11月10日 |
0.8.0 | 2021年11月24日 |
0.0.13 |
|
#249 in 算法
每月下载量:50
用于 5 crates
340KB
6K SLoC
线字符串:用于泛型向量的多边形。
linestring
是一个 Rust crate,提供了处理 2D 空间中多边形和线段的数据结构和方法的库。利用 vector-traits
crate,它抽象了不同的向量实现,允许在向量库(如 glam
和 cgmath
)之间无缝切换(目前如此)。
特性
- 泛型向量支持:无缝切换不同的向量实现。
- 简单的 API,大部分功能都针对
Vec<GenericVector2>
和Vec<GenericVector3>
实现。 - 核心数据结构:线字符串、线和轴对齐边界框(Aabb)。
- 线简化算法: Ramer–Douglas–Peucker 和 Visvalingam-Whyatt。
- 曲线采样:对 boostvoronoi 抛物线弧曲线进行采样。
- 凸包计算:Gift wrapping & Graham scan 算法。
- 交点测试:线字符串的自交测试,或具有 O( n log n + i log n) 复杂度的线组的交点测试。
- 包含测试:凸包包含测试。
用法
在您的 Cargo.toml
文件中包含以下依赖项,选择您需要的向量实现
vector-traits = {version="0.3.2", features= ["glam","cgmath"]} # pick cgmath or glam, whatever you need
linestring = {version="0.12"}
示例
// the vector type can just as well be glam::Dvec2, cgmath::Vector2<f32> or cgmath::Vector2<f64>,
let some_points: Vec<glam::Vec2> = vec![
vec2(77f32, 613.),
vec2(689., 650.),
vec2(710., 467.),
vec2(220., 200.),
];
let convex_hull:Vec<glam::Vec2> = some_points.convex_hull()?;
for p in some_points {
assert!(convex_hull.contains_point_inclusive(p));
}
最小支持的 Rust 版本 (MSRV)
linestring
的最小支持的 Rust 版本是 1.66
。
贡献
我们欢迎社区贡献。请随意在我们的 GitHub 仓库提交拉取请求或报告问题。除非您明确说明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献都应作为上述双重许可,不附加任何额外条款或条件。
许可
许可方式为以下之一
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- 麻省理工学院许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任您选择。
依赖项
~2.9–4MB
~83K SLoC