C++ 建立一组随机点的四面体-四面体化

C++ 建立一组随机点的四面体-四面体化,c++,algorithm,computational-geometry,mesh,tetrahedra,C++,Algorithm,Computational Geometry,Mesh,Tetrahedra,我在3D空间中有一组点(100万点,将来可能更多,比如1000万或1亿点)形成一个球体(它们填充球体-它们不只是在表面上),我想构建一个四面体,将每个球体连接到它的第一个邻居。。。寻找四面体,到目前为止,我所发现的是: 网格算法,但据我所知,它们填补了空白,而我的点是固定的 用于曲面查看的算法,这是非常不相关的 用于三维图像查看的算法(主要是在医学领域):哪一种更接近,但并不完全起作用 我该怎么做 2014-08-09首先,感谢大家的建议!我过去和现在都在度假,只是路过看看是否有人回答了。。

我在3D空间中有一组点(100万点,将来可能更多,比如1000万或1亿点)形成一个球体(它们填充球体-它们不只是在表面上),我想构建一个四面体,将每个球体连接到它的第一个邻居。。。寻找四面体,到目前为止,我所发现的是:

  • 网格算法,但据我所知,它们填补了空白,而我的点是固定的
  • 用于曲面查看的算法,这是非常不相关的
  • 用于三维图像查看的算法(主要是在医学领域):哪一种更接近,但并不完全起作用
我该怎么做

2014-08-09首先,感谢大家的建议!我过去和现在都在度假,只是路过看看是否有人回答了。。。我不失望!!!!:-)
我想我会先试试CGAL,然后再看看。我对O(n2)中的同一组点进行了其他数据计算,我预计将持续大约1周,所以几个小时不会那么糟糕。分钟将是梦想成真

您似乎在寻找三维空间中的算法

我希望您不介意等一会儿,因为1亿个点的Delaunay三角测量将需要相当长的时间

有一个n维Delaunay实现,您可以尝试。我也是。这两个软件包都将在O(n log(n))渐近时间内计算Delaunay三角剖分,而CGAL可以通过适当选择几何核,以数值稳健的方式进行计算。(也就是说,当不精确的运算产生不确定的结果时,它可以自动切换到精确运算。)


我不建议自己尝试实现快速Delaunay三角剖分,即使是在二维中。当您需要根据算术结果评估谓词时,可能会发生可怕的事情。

我在我的一个项目中使用了四面体化。四面体化的效果相当好,速度也足够快。

我的舌头爬回一个黑暗的角落,开始哭泣……这可能是一个好的开始。根据您的需要,3d凸包可能就足够了。您可能想先看看类似的2D问题(用三角形填充):Delaunay三角剖分。这是一个好问题。但是,它不适用于此站点。Try或@Jaa-c不是用来查找水平集曲面的吗?你需要一个四面体的空间。OP一开始就在尝试这样的四面体化。2d中的dt并不难。毕竟这只是一点几何学。@Phpdna:精确的算术很容易。如果你想让你的代码运行得更快,你就不用精确的算术。使用浮点运算,您会遇到一个基本问题,即需要以一致的方式根据运算结果计算谓词。处理这件事并不容易。(换句话说:“我打赌我可以破解你的Delaunay三角剖分代码。”)你也可以修复一个糟糕的三角剖分@Phpdna:怎么做?如果不是三角测量呢?那么如何检测“坏”呢?@tmyklebu:只是澄清一下——CGAL和qhull都实现了快速
O(nlog(n))
算法。CGAL还具有“鲁棒性”——使用精确的算术和符号扰动(必要时),确保始终生成有效的DT,即使输入退化。在实践中,DT算法通常表现出
O(n)
缩放,因此细分1亿个点的时间可能没有您想象的那么糟糕,尽管它肯定是以分钟而不是秒来度量的()。