我有一个平面点集P.我已经知道P中的p点属于边界B(p)。所述边界可以是凸的或非凸的。现在,我想找到带边界B(p)的P的三角剖分。我的问题:
是否有直接实现此功能的算法?紧密的候选人将是受限制的Delaunay三角测量(CDT)。但是,我不认为CDT适用于此:我可以将B(p)中的所有边作为约束,这样所有边都将包含在三角测量中。然而,这并不一定意味着这将是三角测量的边界。如果我在这里错了,请纠正我。
如果您现在使用这样的算法,是否可以指向一个提供实现的(轻量级)C库?
或者:我当然可以使用GTS的标准Delaunay三角测量来对P进行三角测量。然后我需要用B(p)之外的顶点修剪所有面。这可能与GTS有关吗?
答案 0 :(得分:3)
我可以将B(p)中的所有边作为约束进行提供,这样所有边都将包含在三角剖分中。然而,这并不一定意味着这将成为三角测量的边界。
你是对的,受约束的Delaunay三角剖分可以填充边界的凹陷。但是,每个三角形要么完全位于边界内部,要么完全位于边界之外,因此通过遍历从无限面开始的平面直线图的对偶,将边界边缘视为无法通过,可以很容易地删除外部三角形。例如,Jonathan Shewchuk的图书馆Triangle就是这样做的。许可证可能不符合您的喜好,但如果您已经有另一个库来计算受约束的Delaunay三角测量,那么我们不会谈论很多额外的代码。
答案 1 :(得分:1)
poly2tri在给定边界的情况下找到平面区域的CDT。它易于构建和使用。
答案 2 :(得分:0)
首先需要使用边界点Ear Clipping,然后将结果传输到Delaunay三角剖分并添加内部点。