32个版本 (破坏性)
0.25.1 | 2024年8月5日 |
---|---|
0.25.0 | 2024年7月13日 |
0.24.1 | 2024年6月19日 |
0.19.1 | 2024年3月31日 |
0.2.0 | 2023年11月16日 |
#300 in 算法
每月181次下载
在bevy_logic中使用
57KB
1.5K SLoC
iTriangle
A fast and efficient library for Delaunay triangulation and converting complex polygons into convex shapes, including advanced self-intersection resolution.
Delaunay三角剖分
分解为凸多边形
特性
- Delaunay三角剖分: 高效且稳健的Delaunay三角剖分生成实现。
- 凸多边形: 将复杂多边形分解为更简单的凸多边形。
- 自相交: 使用偶-奇或非零规则智能解决相交问题。
文档
入门
将以下内容添加到您的Cargo.toml中
[dependencies]
i_triangle = "^0.25.0"
之后,将您的多边形表示为顶点数组。以下是一个奶酪多边形的示例
let shape = [
[ // body
F64Point::new(0.0, 20.0), // 0
F64Point::new(8.0, 10.0), // 1
F64Point::new(7.0, 6.0), // 2
F64Point::new(9.0, 1.0), // 3
F64Point::new(13.0, -1.0), // 4
F64Point::new(17.0, 1.0), // 5
F64Point::new(26.0, -7.0), // 6
F64Point::new(14.0, -15.0), // 7
F64Point::new(0.0, -18.0), // 8
F64Point::new(-14.0, -15.0), // 9
F64Point::new(-25.0, -7.0), // 10
F64Point::new(-18.0, 0.0), // 11
F64Point::new(-16.0, -3.0), // 12
F64Point::new(-13.0, -4.0), // 13
F64Point::new(-8.0, -2.0), // 14
F64Point::new(-6.0, 2.0), // 15
F64Point::new(-7.0, 6.0), // 16
F64Point::new(-10.0, 8.0) // 17
].to_vec(),
[ // hole
F64Point::new(2.0, 0.0), // 18
F64Point::new(-2.0, -2.0), // 19
F64Point::new(-4.0, -5.0), // 20
F64Point::new(-2.0, -9.0), // 21
F64Point::new(2.0, -11.0), // 22
F64Point::new(5.0, -9.0), // 23
F64Point::new(7.0, -5.0), // 24
F64Point::new(5.0, -2.0) // 25
].to_vec()
].to_vec();
let triangulation = shape.to_triangulation(Some(FillRule::NonZero), 0.0);
println!("points: {:?}", triangulation.points);
println!("indices: {:?}", triangulation.indices);
输出三角剖分: 三角形索引和顶点,其中所有三角形按顺时针方向排列。
依赖
~0.6–1.2MB
~27K SLoC