Algorithm 如何将多边形转换为非重叠三角形上的集合?

Algorithm 如何将多边形转换为非重叠三角形上的集合?,algorithm,graphics,topology,tesselation,Algorithm,Graphics,Topology,Tesselation,我有一个二维点的坐标集,形成一个闭合多边形。我需要生成一组完全分布多边形的二维三角形 除了三角形应该完全填充多边形区域之外,没有任何约束。如果这是一个我可以实现的标准算法,它将更有帮助。对一般多边形进行三角剖分的最佳方法是计算约束-这是多边形顶点的标准Delaunay三角剖分,并施加附加约束,以确保多边形边显式出现在三角剖分中。这种方法可以处理任何类型的多边形-凸多边形、凹多边形、带孔多边形等 Delaunay三角剖分是使网格中的最小角度最大化的剖分,这意味着这种三角剖分在元素形状质量方面是最优

我有一个二维点的坐标集,形成一个闭合多边形。我需要生成一组完全分布多边形的二维三角形


除了三角形应该完全填充多边形区域之外,没有任何约束。如果这是一个我可以实现的标准算法,它将更有帮助。

对一般多边形进行三角剖分的最佳方法是计算约束-这是多边形顶点的标准Delaunay三角剖分,并施加附加约束,以确保多边形边显式出现在三角剖分中。这种方法可以处理任何类型的多边形-凸多边形、凹多边形、带孔多边形等

Delaunay三角剖分是使网格中的最小角度最大化的剖分,这意味着这种三角剖分在元素形状质量方面是最优的


编写约束Delaunay三角剖分算法是一项棘手的任务,但是有许多好的库,特别是和。这两个库都实现了一个(最佳)高效的
O(n*log(n))
算法。

如上所述,Delaunay三角剖分是此任务的一个相当复杂的算法。如果您接受O(n^2)运行时间,您可以尝试更易于理解和编码的耳朵剪辑算法。基本思想如下。每个顶点>=4且无孔的多边形(即,其边界是没有自相交和自相切的单个多段线)至少有一个“ear”。ear是一个三个连续的顶点,在这些顶点上构建的三角形位于多边形内部,并且不包含多边形内部的其他点。如果“切耳朵”(在答案中添加一个三角形,然后替换并删除这三个点的中点),则可以将任务缩减为顶点较少的多边形,以此类推。根据定义,耳可以在O(n^2)中找到,从而产生O(n^3)三角剖分算法。有一种O(n)寻耳算法,虽然它不是很复杂,但用几个短语来描述它相当长

此外,如果您需要更快的算法,您应该了解单调多边形三角剖分和将多边形拆分为单调多边形。甚至有一种线性时间三角剖分算法,但它和Delaunay三角剖分一样复杂


你可以考虑并查看现有方法的一个小的概述。

< P>如果你不要求三角形的顶点是多边形的顶点,那么尝试一个基于梯形分解的三角剖分,如