【问题标题】:3D triangular surface mesh generation using only the exact input points as vertices仅使用精确的输入点作为顶点的 3D 三角形表面网格生成
【发布时间】: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


【解决方案1】:

点集大小的大小是多少?它们是在凸位置,还是大部分在凸位置?你想重建什么样的表面?

CGAL3D alpha shapes 组件看起来像是从您的点重建网格的好工具。它在GPLv3+ 下获得许可。不过,它确实使用了 3D Delaunay 三角剖分。我想知道你在说什么警告。这取决于您拥有的点云类型。

【讨论】:

  • 幅度在 15000 - 25000 点之间。我希望我已经在上面对 MvG 的评论中澄清了凸性问题。我认为这些点的表面构造应该是明确的。我在 3D 中看到的一些关于 Delaunay 的 cmets 出现在 SO 帖子中,例如:stackoverflow.com/questions/7879160/…stackoverflow.com/questions/7879160/…。感谢您提到 3D alpha 形状,我以前没有听说过。
  • 好吧,我不同意关于其他线程的评论。在我的公司 GeometryFactory 中,我们使用使用 3D Delaunay 三角剖分的工具解决了很多 3D 问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多