高效的 Delaunay 三角剖分

Posted

技术标签:

【中文标题】高效的 Delaunay 三角剖分【英文标题】:Efficient Delaunay triangulation 【发布时间】:2011-11-10 16:37:32 【问题描述】:

我正在寻找一个 .NET 实现,它可以从一组点构建 Delaunay 三角剖分。

我已经测试了几个实现,但它们都只适用于少量点(最多 20,000)。

我需要能在合理时间内处理 500,000 点的东西。

【问题讨论】:

您在s-hull.org 尝试过C# 实现吗?它使用的算法应该很快。 你用过qhull吗?虽然那不是 C#。 对于这个特殊问题,什么是“合理的时间”,顺便说一句?你能忍受 60 秒的周转吗? 1秒? 100 毫秒? 我刚刚写了一个 C# 三角测量器,它需要大约 30 秒处理 500K 输入数据点,非并行化。不知道有没有用,我可以发一下。 @Mike 那太慢了。三角形应该在大约 1 秒内管理这么多点。 【参考方案1】:

如果要构建二维 Delaunay 三角剖分,请使用 Triangle.Net。它是 Shewchuk 著名的Triangle 程序的直接 C# 端口。

【讨论】:

Triangle.Net 似乎是在 MIT 许可下获得许可的,但显然它是 Triangle 到 C# 的直接端口,而 Triangle 没有在 MIT 下获得许可。我怀疑它的合法性。 我自己最终使用了 Triangle.NET。将它用于 Unity 5,只需要修复两件小事就可以让 .Net 4.5 与 Unity 一起工作。 @MikaelHögström 你能告诉我们你在 triangle.net 中修复了什么以使其能够统一工作吗? 由于@MikaelHögström 等人还没有记录他们的修复,并且主站点仍然存在当前版本中的错误,这里是您需要做的两个修复的链接,大约需要 2 分钟:triangle.codeplex.com/discussions/651181 @Eagle-Eye:确实如此。特别是,原网站说:“请注意,虽然 Triangle 是免费提供的,但它的版权归作者所有,未经许可不得出售或包含在商业产品中。”【参考方案2】:

我一直在寻找同样的东西,我发现了一个名为 MIConvexHull 的 C# 4.0 库:

“用于 2D、3D 和更高维的凸包算法和库。该代码还可用于计算输入数据的 Delaunay 三角剖分和 Voronoi 网格。基准表明凸包代码和 4 维和更高维三角测量代码与 C++ 库 CGAL 提供的解决方案相当或更好。”

http://miconvexhull.codeplex.com/

2016 年 9 月更新:

该库已移至 Github,现在似乎是在 MIT 许可下发布的(其中一些示例是 GPL)。你可以在这里找到最新版本:

https://github.com/DesignEngrLab/MIConvexHull

文档实际上在源代码中,使用起来很简单。下面是 Delaunay 三角剖分的相关源文件:

https://github.com/DesignEngrLab/MIConvexHull/blob/master/MIConvexHull/Triangulation.cs

如果您想查看 2012 年的原始版本。请看这里:

http://miconvexhull.codeplex.com/SourceControl/changeset/view/e1b26677eb1a#MIConvexHull/Triangulation/Triangulation.cs

【讨论】:

仍然有效。它在几秒钟内设置了 500K 点图。 没有下载,没有文档。下载页面自豪地说你不能下载它,而是要求你解释专有项目格式,猜测你的方式直到你找到一些源示例,并对说明进行逆向工程。它是 GPLv3,排除了很多用途。不是一个很棒的图书馆! 如果您查看 Github 存储库,您会发现源代码已记录在案,并且在 MIT 下获得许可。【参考方案3】:

你试过NetTopologySuite

【讨论】:

这是 JTS 的包装器 - 显然不支持 3D - tsusiatsoftware.net/jts/jts-faq/jts-faq.html【参考方案4】:

有一个 C# 实现可以帮助您生成 Voronoy 图以及 Delaunay 三角剖分:http://www.codeproject.com/Articles/11275/Fortune-s-Voronoi-algorithm-implemented-in-C

【讨论】:

【参考方案5】:

有一个解决方案叫做G#。

它有 Delaunay 三角剖分(也有隔断线)。根据他们网站上的性能图表,您应该能够在大约 30 秒内对 500k 点进行三角测量。

【讨论】:

以上是关于高效的 Delaunay 三角剖分的主要内容,如果未能解决你的问题,请参考以下文章

来自 voronoi 镶嵌的 Delaunay 三角剖分

在 RGB 通道而不是最终图像上应用 Delaunay 三角剖分

适用于 GPU 的最快可用 Delaunay 三角剖分算法

Delaunay三角剖分后如何生成边缘索引?

将单纯形从 Delaunay 三角剖分转换为 networkx 图

检查点是不是位于球的边界/检查 Delaunay 三角剖分的唯一性