【问题标题】:Practical implementations of constrained conforming Delaunay triangulations约束一致的 Delaunay 三角剖分的实际实现
【发布时间】:2020-10-21 04:57:19
【问题描述】:

在给定现有轮廓的情况下,我需要创建一个顶点网格以用于寻路。我认为对于我的用例,一个符合约束的 Delaunay 三角剖分算法最适合,但是我不知道如何实现这样的算法。

CCDT 有哪些可能的实际(而非理论)实现?或者至少我应该研究什么才能提出自己的实现?

我正在使用 c#,但任何语言示例都会有所帮助。

【问题讨论】:

  • 你看过Triangle吗?
  • +1 到三角形。不能具体说明这个问题,但是 IME 实现了计算几何和相邻算法,1)您希望对实际浮点数进行尽可能少的测试,并一遍又一遍地使用它们(Shewchuk 用三角形做到了这一点;如果你不'不要使用三角形,你至少应该阅读他的文章),以及 2)有大量的退化案例在理论文章中被挥手甩掉。
  • 如果您的目标是计算某种缓冲/偏移多边形,您可以尝试检查 boost 几何或多边形库,还有移植到 c# 的裁剪器库
  • 那里也有C# port of triangle

标签: algorithm mesh delaunay


【解决方案1】:

我假设您正在使用符合算法的 2D 约束 Delaunay 三角剖分 (CDT) 的实现。

您绝对不想自己实现 CDT。让它健壮很困难,并且需要对退化的情况使用专用的精确数字类型。

在 2D 中存在多个 CDT 的开源实现(均使用一致性算法)。我可以引用Triangle,由Jonathan Shewchuk 用C 实现,以及CGAL 2D triangulations,由CGAL 项目用通用C++(使用C++ 模板)实现。对于 CGAL,一致性算法在 2D 网格生成器一章中:参见Building Conforming Triangulations。说实话,我不得不说我是CGAL中2D一致性算法的作者。

【讨论】:

    【解决方案2】:

    由于您使用 C# 工作,因此如果您可以使用非托管代码,那么在其他一些答案中引用的 Triangle 库可能对您来说是一个很好的解决方案。我用过它,它非常好。尽管 Java 不是您感兴趣的语言,但我在 https://github.com/gwlucastrig/Tinfour 有一个 Java 实现,它可能提供了一个更加面向对象的 API 的示例。还有一些关于约束一致的 Delaunay 三角剖分的想法和应用的文章,它们可能会帮助您弄清楚如何将 CCDT 应用于您的特定问题。你可以在https://github.com/gwlucastrig/Tinfour/wiki/About-the-Constrained-Delaunay-Triangulationhttps://github.com/gwlucastrig/Tinfour/wiki/Tutorial-Using-Polygon-Based-Constraints找到这些

    【讨论】:

      猜你喜欢
      • 2014-02-23
      • 2014-07-29
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 2015-01-07
      相关资源
      最近更新 更多