20次发布 (11次破坏)
0.11.0 | 2023年12月8日 |
---|---|
0.10.0 | 2023年11月18日 |
0.9.0 | 2023年11月10日 |
0.7.0 | 2021年11月24日 |
0.0.3 | 2021年3月25日 |
#239 in 数学
每月 128 次下载
用于 toxicblend
505KB
3K SLoC
这个简单的库尝试找到封闭2D几何的中心线,也称为中轴线。
它专注于字母形状,即具有潜在封闭岛屿的顶点环。目前直接连接到其他环的环不起作用。
它使用一个分段沃罗诺伊图作为基础,然后通过比较边(绿色)和创建它的输入几何(红色)之间的角度来过滤掉“尖锐”部分(绿色)。如果角度接近90°,则会被忽略。请注意,经过过滤尖锐部分后,结果(蓝色)在技术上不是真正的中心线,但它使工具路径等变得更加干净。它还对生成的中心线执行线简化。
let segments = ...same as boost voronoi segments...
let mut centerline = Centerline::<i32, glam::Vec3>::::with_segments(segments);
centerline.build_voronoi()?;
// the cosine value of the angle limit.
let cos_angle:f32 = 0.38;
// the RDP simplification distance
let centerline_simplification:f32 = 0.1;
centerline.calculate_centerline(cos_angle, centerline_simplification, None)?;
println!(
"Result: lines:{}, line_strings:{}",
centerline.lines.as_ref().map_or(0,|x|x.len()),
centerline.line_strings.as_ref().map_or(0,|x|x.len())
);
GUI示例
cargo run --example fltk_gui --features=obj-rs --release
示例仅显示2D,但实际上生成的中心线是3D线段。
Z坐标是2D中心线与其创建的几何形状之间的距离。
示例GUI接受.obj
文件作为输入。该.obj
文件需要在某个轴对齐平面中是2D的(其中一个坐标必须为零)。此外,请确保没有交叉的外边缘。
最小支持的Rust版本(MSRV)
centerline
的最小支持的Rust版本是1.66
。
待办事项
- 添加更好的测试
- 有时形状被注册为在其凸包“外部”
- 将OpenGL添加到fltk_gui,以便可以可视化中心线的3D效果。
贡献
我们欢迎社区贡献。请随意提交拉取请求或在我们的GitHub仓库报告问题。除非你明确声明,否则任何有意提交以包含在你工作的贡献,根据Apache-2.0许可,应按上述方式双重许可,不附加任何额外条款或条件。
许可
根据以下之一许可
- Apache License,版本2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT)
由您选择。
依赖项
约9MB
约195K SLoC