【发布时间】:2014-05-26 12:14:01
【问题描述】:
我正在尝试实现mesh generation algorithm。我使用CGAL::Delaunay_triangulation_3 类代表德劳内四面体化。
在算法的一个阶段(第 7 节:刻面恢复),我有一个 Delaunay 四面体化(比如DT0),我需要在 Delaunay 四面体化内创建一个空腔(或孔)C(从而对其进行转换说DT1)并通过在空腔的顶点上执行Delaunay四面体化(比如DT2)再次用新的四面体填充它。产生的四面体化不一定是纯粹 Delaunay(即,它可能有一些不满足empty sphere criteria 的单元格)。关于为什么需要创建和重新填充此类空腔的更多详细信息,请参见下面的上下文部分。
问题:
在 CGAL 中是否有可能在 现有的 Delaunay 四面体中创建这样一个空腔并用另一个四面体填充它?
相关详情:
- Cavity
C是一个多面体,它的所有面都与DT0中的单元格共享。 -
DT2不代表C的顶点的完整 Delaunay 四面体化。它只包含C内的那些四面体,其余的四面体被丢弃。 - 我发现this question 是 有些与我的有关,但仍未解决。
背景:
创建空腔并重新填充空腔的目的如下:
算法(上述)用于计算约束保留 Delaunay 四面体。算法的输入是一组顶点、段(一段连接 2 个顶点)和面(在我的情况下,这些是三角形)作为必须在最终四面体化中保留的约束。在这个问题中,我正在讨论算法的facet保留部分的实现。为了恢复最终四面体化中任何缺失的约束面,算法创建一个空腔并用四面体(或单元)重新填充它,这样一些单元的面的组合可以恢复约束面(即, f1+f2+...+fn=f 其中f1,f2..fn 是空腔中一些新创建的单元的面,f 是约束面,或者换句话说,f1,f2..fn 是输出四面体中f 的子面。输出四面体化在文献中称为Constrained Delaunay tetrahedralization,它可能是也可能不是Delaunay。
我的尝试:
目前,我没有找到任何相关的 CGAL 类来直接解决这个问题,所以我正在考虑执行以下操作:
- 使用
CGAL::Delaunay_triangulation_3表示初始 Delaunay 四面体化DT0。 - 在
DT0内部计算腔C遵循算法并将C表示为单独的Polyhedron_3对象。剩余的四面体集统称为DT1。 - 计算
C的顶点的Delaunay 四面体化DT2'。 - 从
DT2'(根据算法)中选择单元格来计算DT2。 - 最后,合并
DT1和DT2。由于两者共享C的切面(由算法保证),所以原则上可以连接。
现在我正在考虑将DT1 和DT2 表示为std::list<Tetrahedron_3> 对象,但是如何合并它们以创建四面体?
【问题讨论】:
-
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊软件开发者的一个众所周知的做法
-
@JoranBeasley 我已将 context 部分添加到我原来的问题中。我希望它能解释创建和重新填充空腔的目的。
标签: c++ algorithm computational-geometry mesh cgal