【问题标题】:Building the tetrahedra of a set of random points - tetrahedralization构建一组随机点的四面体 - 四面体化
【发布时间】:2014-08-03 18:39:10
【问题描述】:

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

  • 网格划分算法,但据我所知,它们填充空白,而我的点是固定的。
  • 表面观察的算法,这无关紧要
  • 用于查看 3D 图像的算法(主要用于医疗领域):更接近但效果不佳。

我该怎么做?

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

【问题讨论】:

  • 四面体化……我的舌头在黑暗的角落里爬了回来,开始哭泣……
  • lcni.uoregon.edu/~dow/Projects/Brain_casting/… 可能是一个好的开始。根据您的需要,一个 3d 凸包可能就足够了
  • 您可能想先看看类似的 2D 问题(用三角形填充):Delaunay Triangulation。
  • 这是个好问题。但是,它不适合此站点。试试programmers.stackexchange.comsoftwarerecs.stackexchange.com
  • @Jaa-c 这不是用来寻找水平集的表面吗?为此,您需要一个四面体空间。 OP 正试图首先进行这样的四面体化。

标签: c++ algorithm computational-geometry mesh tetrahedra


【解决方案1】:

您似乎正在寻找 3 空间中的 Delaunay triangulation 算法。

我希望您不要介意等待一段时间,因为 1 亿点的 Delaunay 三角剖分需要相当长的时间。

qhull 有一个你可以尝试的 n 维 Delaunay 实现。 CGAL 也是如此。两个包都将在o(n log(n))渐近时间和cgal中计算Delaunay三角测量,并且CGAL可以采用适当的几何内核选择,以数字稳健的方式这样做。 (也就是说,对于不精确算术产生不确定结果的计算,它可以自动切换到精确算术。)

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

【讨论】:

  • 2d 中的 dt 并不难。毕竟它只是一个几何图形。
  • @Phpdna:精确算术很容易。如果你想让你的代码运行得很快,你就不要使用精确的算术。使用浮点算术,您会遇到一个基本问题,即您需要以一致的方式评估算术结果的谓词。处理这件事并不容易。 (换句话说:“我敢打赌,我能破解你的 Delaunay 三角测量代码。”)
  • 你也可以修复坏三角测量!?
  • @Phpdna:怎么样?如果不是三角测量呢?以及如何检测“坏”?
  • @tmyklebu:澄清一下——CGAL 和 qhull 都实现了快速的O(nlog(n)) 算法。 CGAL 也是“健壮的”——使用精确的算术和符号扰动(必要时),确保始终产生有效的 DT,即使输入是退化的。在实践中,DT 算法经常表现出O(n) 缩放,因此细分 1 亿个点的时间可能没有您想象的那么糟糕,尽管它肯定会以分钟而不是秒来衡量 (doc.cgal.org/latest/Triangulation_3)。
【解决方案2】:

我在我的一个项目中使用tetgen 进行四面体化。它工作得很好,速度也够快

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-28
    • 2014-05-17
    • 2022-10-17
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多