我从一组点(使用Boost.polygon)计算了一个Voronoï图。
我尝试找到一个Delaunay三角剖分,将每个Voronoï边的每个像元中心连接起来,但是我错过了一些边。
在下图中,红点是我的初始点,蓝线是Voronoï边缘(我忽略了无限边缘),绿线是三角剖分边缘(每个蓝色边缘一个绿色边缘,连接了两个像元起点)。
我们可以看到缺少对角线边缘。我想念什么?
我从一组点(使用Boost.polygon)计算了一个Voronoï图。
我尝试找到一个Delaunay三角剖分,将每个Voronoï边的每个像元中心连接起来,但是我错过了一些边。
在下图中,红点是我的初始点,蓝线是Voronoï边缘(我忽略了无限边缘),绿线是三角剖分边缘(每个蓝色边缘一个绿色边缘,连接了两个像元起点)。
我们可以看到缺少对角线边缘。我想念什么?
Answers:
图中的中心点是Voronoi图的退化边缘。如果为不规则点云生成Voronoi图,则每个顶点将具有3度。只有两个(或更多个)顶点重合时,才会出现4度(或更多个)的顶点。这意味着它们之间存在零长度的边。但是该边缘在Delaunay三角剖分中仍应具有相应的边缘。问题在于您可以随意选择两个可能的边中的哪一个,因为零长度边没有相关的方向。
为了可视化我在说什么,请考虑从四个较少的规则间隔的点开始(这样,我们仅从3度顶点开始),然后逐渐将它们转换为它们的常规位置。
我们可以通过两种不同的方式来完成此操作,这两种方式都会导致图表中的退化情况。您将看到最终得到两个不同的Delaunay三角剖分,它们都是退化案例的有效限制:
我假设您的代码由于某种原因而缺少这种退化的情况,但是实际上并没有看到您如何从Voronoi图中计算Delaunay三角剖分,因此不可能向您指出更多。
还要注意,具有更高的简并度(围绕一个圆以相等的角度分布四个以上的点)可能需要额外注意:
这些动画还显示(即使在非退化的情况下),相应的Voronoi和Delaunay边缘也不一定在它们的有限范围内实际交叉。这可能使得更难于看到在端部对规则多边形进行三角剖分的2个(或3个)边缘实际上对应于全部位于中心的几个退化边缘。还要注意,总共有五种不同的五边形三角剖分和14种六边形三角剖分(尽管我不知道是否可以通过变形非退化三角剖分获得全部14种三角剖分)。
编辑(按OP)
使用Boost.polygon计算的Voronoi图可以遍历每个Voronoi顶点,以及与这些顶点链接的每个边(顺时针或逆时针)。这样,可以为每对边创建一个三角形(两个相连的边将链接到3个像元)。