我需要创建一个顶点网格,用于寻路,给定一个现有的轮廓。我认为对于我的用例,约束一致的 Delaunay 三角测量算法将最适合,但是我不知道如何实现这样的算法。
CCDT有哪些可能的实际(非理论(实现?或者至少我应该研究什么才能提出自己的实现?
我正在使用 c#,但任何语言示例都会有所帮助。
我假设您正在寻找具有一致性算法的 2D 约束 Delaunay 三角测量 (CDT( 的实现。
您绝对不想自己实现 CDT。要使其健壮是很困难的,并且需要对退化的情况使用专用的确切数字类型。
CDT 在 2D 中存在几种开源实现(均使用符合算法(。我可以引用 Jonathan Shewchuk 用 C 实现的三角形,以及 CGAL 项目的通用C++(带有 C++ 个模板(实现的 CGAL 2D 三角测量。对于 CGAL,一致性算法位于 2D 网格生成器一章中:请参阅构建一致性三角测量。老实说,我不得不说我是 CGAL 中 2D 一致性算法的作者。
由于您使用的是 C#,因此,如果您可以使用非托管代码,那么在其他一些答案中引用的 Triangle 库可能是一个很好的解决方案。我用过它,它非常好。虽然Java不是你感兴趣的语言,但我在 https://github.com/gwlucastrig/Tinfour 有一个Java实现,它可能会提供一个更面向对象的API的例子。 还有一些关于约束一致性德劳内三角测量的想法和应用的文章,这可能有助于您弄清楚如何将CCDT应用于您的特定问题。您可以在 https://github.com/gwlucastrig/Tinfour/wiki/About-the-Constrained-Delaunay-Triangulation 和 https://github.com/gwlucastrig/Tinfour/wiki/Tutorial-Using-Polygon-Based-Constraints 找到这些