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 2021年3月25日

#249 in 算法

每月下载量:50
用于 5 crates

MIT/Apache

340KB
6K SLoC

crates.io Documentation status-badge dependency status license

线字符串:用于泛型向量的多边形。

linestring 是一个 Rust crate,提供了处理 2D 空间中多边形和线段的数据结构和方法的库。利用 vector-traits crate,它抽象了不同的向量实现,允许在向量库(如 glamcgmath)之间无缝切换(目前如此)。

特性

  • 泛型向量支持:无缝切换不同的向量实现。
  • 简单的 API,大部分功能都针对 Vec<GenericVector2>Vec<GenericVector3> 实现。
  • 核心数据结构:线字符串、线和轴对齐边界框(Aabb)。
  • 线简化算法: Ramer–Douglas–PeuckerVisvalingam-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 许可证定义的,您有意提交以包含在作品中的任何贡献都应作为上述双重许可,不附加任何额外条款或条件。

许可

许可方式为以下之一

任您选择。

依赖项

~2.9–4MB
~83K SLoC