点云三角剖分算法 < P>我想创建一个简单的C++应用程序,它给出了100个随机点(用它们的凸包)来三角化这个点的云。我已经搜索了这个主题,我可以看到Delaunay三角剖分是一个选项,但我仍然无法理解如何实现这个(例如在C++中)。另外,在下一个层面上,我想把所有的Delaunay“非法”三角形涂成不同的颜色,以更好地显示和理解Delaunay的算法

点云三角剖分算法 < P>我想创建一个简单的C++应用程序,它给出了100个随机点(用它们的凸包)来三角化这个点的云。我已经搜索了这个主题,我可以看到Delaunay三角剖分是一个选项,但我仍然无法理解如何实现这个(例如在C++中)。另外,在下一个层面上,我想把所有的Delaunay“非法”三角形涂成不同的颜色,以更好地显示和理解Delaunay的算法,c++,algorithm,graphics,triangulation,C++,Algorithm,Graphics,Triangulation,有人能帮我理解如何对这些点进行三角测量吗?可能是一个小的代码部分,或者通常是我需要实现的算法 我将强烈建议不要从头开始编写任何Delaunay三角剖分算法。如果我这样做是为了对算法的输出有一个直观的了解,我会将它修改为指定不同的颜色,等等 如果你有足够的动机来从头开始实现这一点,那么我的建议是在你开始处理3D版本之前先实现2D Delaunay三角剖分。< / P> < P>如果你想学习C++中的三角测量算法和它们的编码,那么C++中的强>组合三角可能是诱人的,但初学者初学者当然是“太强”太难了

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

我将强烈建议不要从头开始编写任何Delaunay三角剖分算法。如果我这样做是为了对算法的输出有一个直观的了解,我会将它修改为指定不同的颜色,等等


如果你有足够的动机来从头开始实现这一点,那么我的建议是在你开始处理3D版本之前先实现2D Delaunay三角剖分。< / P> < P>如果你想学习C++中的三角测量算法和它们的编码,那么C++中的<>强>组合三角可能是诱人的,但初学者初学者当然是“太强”太难了。因此,我建议你先学习<关于<三角>的算法方面的知识,以及C++在C++中的基础知识>强> > <>强>在你处理组合问题之前。

< P>我想你首先需要一个通用的三角剖分,然后修复不是Delaunay合法的所有东西? 非常糟糕的三角剖分算法(角度向量不好)如下所示:

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

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

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


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

这似乎不是关于编码的问题,而是关于三角测量的问题。但我对三角测量及其编码都感兴趣谢谢你的答案和时间!首先,我想简单地对这100个点进行三角测量。有没有一种简单而全面的方法可以做到这一点?我见过像削耳之类的算法,但我仍然不能理解它们(或用c++实现它们)……如果你只想对这100个点进行三角测量,你能使用别人编写的软件吗?如果是这样,那么看看这个:(我还发现了一篇讨论Delaunay和Voronoi的StackOverflow帖子:)我不想使用现成的解决方案,因为我需要通过编写代码来了解这一点。如果你还有什么建议,我会很高兴的!谢谢大家!你似乎真的有动机在实践中学习(这是一种极好的态度)。我建议你读书。我知道你说过“只有100个”顶点,但是DT算法是相当复杂的(当你读这本书时就会看到),不管有多少个顶点。加上,