algorithm - 修改 Delaunay 三角剖分的有效方法

标签 algorithm matlab geometry computational-geometry delaunay

MATLAB 在 their website 上声明:

It is more efficient to edit a delaunayTriangulation to make minor modifications as opposed to recreating a new delaunayTriangulation from scratch

这有什么算法吗?

如果我有 1000 个点并将其中 3 个移动到新位置,最好的方法是将它们移除并重新插入,还是有更好的方法?

最佳答案

有一整套算法可以通过一次插入一个点来构建 Delaunay 三角剖分。 Devillers, O. (2002) 描述了一个非常好的去除点的算法。 “关于 Delaunay 三角剖分中的删除”,国际计算几何杂志 * 应用 12.3。您应该能够在网上找到几个不同版本的 Devillers 文章。

由于您在 MATLAB 中工作,这对您没有太大帮助,但我已经在 J​​ava 中实现了 Devillers 算法并且它运行良好。如果您有一个支持修改现有三角剖分的 API,那么移除 3 个点然后将它们插入网格中的其他位置应该会发生得如此之快,以至于很难测量操作所需的时间。当然,1000个顶点是一个很小的三角剖分,简单重建网格所需的时间应该也很小。因此,除非您这样做了很多很多次,否则每次需要更改其内容时只重建网格应该是合理的。

如果您想查看增量 Delaunay 三角形实现的基于 Java 的实现,可以在 https://github.com/gwlucastrig/Tinfour 找到一个。 .我已经写了一些关于实现细节的笔记,并将它们发布在 http://gwlucastrig.github.io/Tinfour/doc/TinfourAlgorithmsAndDataElements.pdf

关于algorithm - 修改 Delaunay 三角剖分的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65168365/

相关文章:

验证非相交形状的自由多边形顶点的算法

python - 在不知道嵌套级别数的情况下递归迭代到所有嵌套数组的最佳方法?

java - java中的kadane算法

matlab - 如何使用SIFT算法计算两张图片的相似度?

Python:正多边形的面积

algorithm - 订购广告/优惠以增加收入(置信度算法?)

java.lang.OutOfMemory错误: Java heap space using Matlab R2013a

matlab - MATLAB 列的内存分析含义

javascript - 包含可拖动的圆圈到更大的圆圈

javascript - 快速最小-最大 AABB 碰撞检测