【问题标题】:Points cloud Triangulation algorithm点云三角剖分算法
【发布时间】:2013-03-19 04:13:45
【问题描述】:

我想创建一个简单的 C++ 应用程序,给定 100 个随机点(带有凸包),它将对这些点的云进行三角测量。我已经搜索了这个主题,我可以看到 Delaunay 三角测量是一个选项,但我仍然无法理解如何实现它(例如在 c++ 中)。同样在下一个级别,我想将所有 Delaunay“非法”三角形绘制成不同的颜色,以更好地展示和理解 Delaunay 的算法。

谁能帮我理解如何对这些点进行三角测量?也许是一个小代码部分或通常是我需要实现的算法?

【问题讨论】:

  • 这似乎不是编码问题,而是三角测量问题。
  • 但我对三角测量及其编码都感兴趣

标签: c++ algorithm graphics triangulation


【解决方案1】:

我会强烈建议不要从头开始编写任何 Delaunay 三角剖分算法。如果我这样做是为了直观地了解算法的输出是什么样的,我会采用 Johnathan Shewchuk's Triangle code 并对其进行修改以分配不同的颜色等。

但是,如果您有足够的动力从头开始实施,那么我的建议是先实施 2D Delaunay 三角剖分,然后再处理 3D 版本。

【讨论】:

  • 感谢您的回答和时间!首先,我想简单地对这 100 个点进行三角测量。有没有一种简单而全面的方法来做到这一点?我见过诸如剪耳之类的算法,但我仍然无法理解它们(或在 C++ 中实现它们)..
  • 如果你只想三角测量这100个点,你能用别人写的软件吗?如果是这样,那么看看这个:codeproject.com/Articles/492435/…(我还发现了一篇讨论 Delaunay 和 Voronoi 的 StackOverflow 帖子:stackoverflow.com/a/9240121/1384030
  • 我不想使用现成的解决方案,因为我需要通过编码来学习它。如果您有更多建议,我会很高兴!到目前为止,谢谢!
  • 你似乎真的有动力在实践中学习(这是一种很好的态度)。我建议阅读this book。我知道您说“只有 100 个”顶点,但是无论有多少顶点,都需要使用 DT 算法(正如您在阅读本书时会看到的那样)。另外,"In 3D, the worst case complexity of a triangulation is quadratic in the number of points"
【解决方案2】:

我猜您需要先进行一般三角测量,然后修复所有不符合 Delaunay 的问题?

一个非常糟糕的三角测量算法(带有一个糟糕的角度向量)是这样的:

(i) 获取点云的凸包 (ii) 将 CH 的一个随机点(使用第一个很方便)与 CH 的每个其他点连接(当然除了下一个和前一个,它已经形成了一条边)。

(iiiA) 对于平面上的每个其他点,如果该点位于一个三角形中,则通过将该点与其所在三角形的三个顶点连接起来,将其制成三个三角形。 (iiiB) 如果它位于边上(100 分不太可能,我想你可以跳过它),将它与它所在的四边形的其他两个顶点连接起来。

我想你可以从这个开始。云将被完全三角剖分,但可能超过一半的边缘将是 Delaunay 非法的。然后你可以继续修复(翻转)必要的边缘。

如果您在实现它时发现问题,我可以提供一些示例代码来帮助您入门。现在请记住,算法的返回值可以方便地作为三角形的集合/向量;这样您就可以单独操作它们并更改它们的颜色。

【讨论】:

    【解决方案3】:

    如果你想同时了解三角测量算法及其在 C++ 中的编码,那么用 C++ 编码三角测量的组合项目可能看起来很诱人,但对于一个初学者。因此,我建议您先了解三角测量的算法方面C++的基础知识单独在处理之前综合问题。

    【讨论】:

      猜你喜欢
      • 2016-10-06
      • 2012-10-11
      • 2017-09-01
      • 1970-01-01
      • 2013-07-10
      • 2012-05-10
      • 2021-11-01
      • 1970-01-01
      • 2021-05-27
      相关资源
      最近更新 更多