Delaunay 三角形中的额外边

如何解决Delaunay 三角形中的额外边

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

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

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

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

(抱歉,我不能在这里发布我的代码。任何建议都会非常有帮助。)

Annotated Coordinates

Erroneous Delaunay Triangulation

Another example

解决方法

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

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

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

这篇文章还对算法进行了很好的pseudo-code implementation,也许仔细研究一下也会对您有所帮助。

,

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

Delaunay Triangulation

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

祝你的项目好运。祝你成功。

加里

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?