【问题标题】:Extra edges in Delaunay Triangles德劳内三角形中的额外边
【发布时间】:2021-08-24 03:18:37
【问题描述】:

请看下面的附图。几乎没有额外的边缘,并且在添加每个点时它们似乎满足“点不在外接圆内”属性。我已经从两个屏幕截图中删除了超级三角形。

我是否需要重新运行循环以消除坏三角形?但这不是 Bowyer-Watson 算法所说的。有人可以帮助了解这里可能出了什么问题吗?

编辑:这些是第一个屏幕截图的处理顺序中的顶点。
(1500, 1500)
(3300, 1500)
(2800, 2800)
(1750, 2600)
(2350, 2900)

更新 1:
在重新填充多边形时,我将新点与所有边缘连接起来。这就是为什么会出现额外的边缘,但我还不知道如何选择和忽略单个边缘点。

(对不起,我不能在这里发布我的代码。任何建议都会很有帮助。)

【问题讨论】:

  • 如果不知道您对该算法的实现实际上在做什么,这很难确定。也许您至少可以提一下两张图片中的点是按什么顺序添加的?
  • 除此之外,让我印象深刻的是,在这两个图像中,一些三角形的周长都丢失了。我不认为这里的算法有问题,你应该仔细检查你的代码。
  • @peabrainiac 感谢您的回复。我已经随机化了坐标,所以我不能说附加图像中的顺序。数据现在被覆盖。我一直在重新检查代码,但看不到重复的地方。
  • 检查代码时要查看的另一件事是为什么您有交叉的边缘。这不应该发生在德劳内。在你移除超级三角形之前,交叉点在那里吗?
  • @GaryLucas 我会重新检查代码。是的,超三角形顶点的交叉点就在那里。我最终删除了所有具有超三角形顶点的三角形。该算法没有说明不考虑包含超顶点的三角形。我不确定这是否会导致这些额外的边缘。

标签: triangulation delaunay


【解决方案1】:

关于Bowyer-Watson-Algorithm 的维基百科文章指出:

Bowyer–Watson 算法是一种增量算法。它通过将点一次添加到所需点子集的有效 Delaunay 三角剖分来工作。每次插入后,外接圆包含新点的所有三角形都将被删除,留下一个星形多边形孔,然后使用新点重新三角化

换句话说,在添加一个新点并删除所有有问题的边之后,您只需将其连接到那些被删除的三角形形成的孔角,而不是图中的每个点。与您的三个示例不同,这样边永远不会相交。

这篇文章还有一个相当不错的pseudo-code implementation算法,也许仔细看看也能对你有进一步的帮助。

【讨论】:

  • 谢谢,是的,您正确地指出了问题。我目前被困在这部分。例如,当已经存在 3 个点(1 个三角形 - 忽略超三角形)并且在三角形外部添加第 4 个点(类似于点 [1750, 2600] )时,如何选择点 [1500,1500]、[2800 ,2800] 仅通过忽略点 [3300,1500] 吗?我当前的代码选择了坏三角形的所有边缘并将点连接到所有边缘。
  • [3300,1500] 在那个例子中不是坏三角形的角吗?因此,如果您仅将它们连接到 [1750,2600],它应该被忽略。也许你忘了清除添加点之间的坏三角形列表或类似的东西
【解决方案2】:

使用您提供的坐标,我得到了如下所示的 Delaunay 三角剖分。根据我在 Bowyer-Watson 算法方面的经验,我猜你的问题是你没有在过程的“挖洞”阶段去除边缘(我所说的“经验”是指“我犯过的错误过去制造的”)。当然,还有很多其他事情可能会出错。

我在文档Tinfour Algorithms and Data Elements 的第 20 页左右开始记录了我自己为实施 Bowyer-Watson 所做的努力。也许他们会给你一些你可以使用的想法。

祝你的项目好运。祝你一切顺利。

加里

【讨论】:

  • 谢谢你,@Gary。我会详细阅读你的文件,它非常精确。感谢您在 Delaunay 上所做的工作。
猜你喜欢
  • 2012-05-06
  • 1970-01-01
  • 2013-01-22
  • 2015-08-29
  • 2014-03-24
  • 2012-04-27
  • 2018-10-14
  • 2016-04-21
  • 2018-01-20
相关资源
最近更新 更多