如何计算凸多面体与另一个多面体之间的交点?

时间:2015-08-14 11:05:54

标签: computational-geometry intersection convex polyhedra non-convex

手头的问题是关于3D空间中2D生长的科学模拟的一部分。通过将(三角形)片段添加到先前生长的形状来增加2D形状。

Image explanation

请注意,3D中的实际线段具有厚度,因此,我的代码实际上适用于三角形棱镜。

在某一点上,这些2D形状(无论相对方向和位置如何)发生碰撞。

如果其中一个新的三角形棱镜与先前插入的段相交,我只想插入"部分"一段不与先前插入的段相交的段。如下所示,标记为T1和T2的段。

Wall diagram

在第一步中,我计算了所有交叉点边缘到面。然后,我使用3D中的CGAL Delaunay三角测量包来对四面体网格中的结果点集进行网格划分。作为最后一步,我扔掉所有与先前插入的段相交的四面体。 在大多数情况下,这种方法效果很好 - 但我现在确信这个想法不能用于基本原因。

什么是更可靠的计算方法?

1 个答案:

答案 0 :(得分:0)

所以你想找到两个凸包的交叉点?

我认为你的方法在所有情况下都不会起作用,但只有在某些退化的情况下才是正确的。例如,如果一个凸包完全在另一个内部,则没有面/边交叉。

一个更明显可靠的方法是从一个足够大的凸包开始,将两个船体都包围起来(所以基本上代表所有空间),然后对于你的两个凸体中的每个平面,将该船体划分为该平面,投掷离开"外面的部分"。

结果将是交叉点 - 可能没什么。