如何对内部有和没有顶点和孔的多边形进行三角剖分 - 可以进行德劳内三角剖分吗?

Posted

技术标签:

【中文标题】如何对内部有和没有顶点和孔的多边形进行三角剖分 - 可以进行德劳内三角剖分吗?【英文标题】:How to triangulate a polygon with and without vertices and holes inside - delaunay triangulation possible? 【发布时间】:2021-10-09 12:42:00 【问题描述】:

我遇到了以下问题:我正在研究一种算法,输出将是一个任意多边形。多边形可以是凹面的,其中有孔,也可以有边角为 180 度的顶点。

我需要对所述多边形进行三角剖分,其中包含和不包含其他顶点。 delaunay 三角剖分可以处理这个问题,特别是如果我只有多边形内部没有顶点?我也许可以避免多边形内的洞,如果这样可以减轻事情。

感谢阅读

【问题讨论】:

【参考方案1】:

您可以使用约束三角剖分(Delaunay 与否)对多边形进行三角剖分。有一个使用CGAL的例子here。

【讨论】:

【参考方案2】:

您可以看看这些 Fade2D 示例:

https://www.geom.at/example4-zones-defined-areas-in-triangulations/

https://www.geom.at/boolean-operations-on-polygons-with-holes/

学生许可证是免费的。

【讨论】:

【参考方案3】:

您可以使用Triangle。

通过命令行运行三角形,您创建一个 ASCII .poly file,指定输入(即您的多边形)的顶点和边以及域中的任何孔。每个孔都由其 xyz 位置定义。例如,如果我有一个里面有一个三角形孔的正方形域,我的输入可能如下所示:

7 2 0 0  # 7 vertices
1 1 -1
2 1 1
3 -1 1
4 -1 -1
5 -.5 -.5
6 .5 -.5
7 0 .5
7 0      # 7 segments: four for the square and three for the hole
1 1 2
2 2 3
3 3 4
4 4 1
5 5 6
6 6 7
7 7 5
1      # 1 hole
1 0.0 0.0

如果要细化网格(即在内部添加顶点),可以使用 -a 选项(限制三角形的最大面积)或 -q 选项(控制生成的三角形的质量但不直接限制大小)。命令行开关的文档是here。

【讨论】:

以上是关于如何对内部有和没有顶点和孔的多边形进行三角剖分 - 可以进行德劳内三角剖分吗?的主要内容,如果未能解决你的问题,请参考以下文章

凸多边形的三角剖分

区间DP之凸多边形的三角剖分

凸多边形最优三角剖分

细分和三角剖分多边形

用非凸多边形裁剪和三角剖分三角形

Three.js将多边形线条(Line)转换成模型(Mesh)