【发布时间】:2013-01-12 04:56:08
【问题描述】:
我从一个精确的数值解中得到了一些点,这些点构成了一个光滑的 3D 物体的表面。这些点已经满足平滑标准并且不包含噪声(除了双精度舍入误差)。我现在需要为物理模拟软件从这些点生成一个三角形网格。
这个问题的两个方面与 SO 上已经提出的问题不同:
- 三角测量应该完全使用规定的输入点,只规定的点,没有插值,没有添加或省略任何点,“慢跑”等。似乎已经问过这种类型的问题在“点云”的上下文中多次出现,其中输入点表示表面上的大致位置,但我的坐标是准确的。
- 在 3d 中多次提到 Delaunay 三角剖分,但也提到了一些注意事项,并且 Delaunay 三角剖分被认为不是 3d 的“最佳”。
是否有关于可以生成某种形式的高质量 3d 三角剖分的开源库或算法的建议(超严格的最优性保证不是必需的,但某种形式的质量目标会很好)只保留(和所有)规定的顶点,不将其视为采样和重建问题?
将不胜感激使用以下一种(或多种)实现:C、OCaml、C++ 或 Python。我找到了 Qhull:http://www.qhull.org/(也用于 SciPy 的 scipy.spatial),但它看起来只生成 Delaunay 三角形,并且有一些令人困惑的选项,因此我不确定它能否满足我的第一个约束。
【问题讨论】:
-
我认为这是一个类似的问题,但我不限于 vtk。 @Alejandro 似乎对我有类似的目标。但是,我对“重建”方法(将点视为近似值)不是我所追求的概念持严格的态度,亚历杭德罗愿意考虑点云库之类的东西,而我不是。跨度>
-
你的 3D 身体是凸的吗?您的一组点的凸包将是一个多面体,并且该多面体的每个面都可以使用 Delaunay 三角剖分进行三角剖分。但是如果你的身体不凸,就会有一些内点根本用不上。如果你有这样的内部点,那么这个解决方案就行不通了,而且通常身体不会被点明确地描述。也许stackoverflow.com/q/8023301/1468366 可能会为这种情况提供一些有用的指示。
-
我强烈建议您弄清楚 Qhull,因为编写自己的三角测量是一场噩梦。此外,Qhull 具有 C++ 接口,速度极快,由一群计算科学家构建,并经过数年的优化。这是您无需重新发明的一个轮子!是的,您可以将 Qhull 设置为仅使用输入点而不添加或省略点,事实上这是我正在使用的版本的默认设置。
-
@MvG:3D 物体总是至少是星凸的。出于实际目的,假设身体本质上是一种管子;管的每个横截面都保证是一个简单的多边形,星凸。管子的“轴线”(通过连接每个横截面的质心形成的线)形成一条非常平缓的曲线,不会打结、陡峭地弯曲或向后弯曲,等等。
标签: 3d geometry point mesh delaunay