1

手头的问题是关于3D空间内2D增长的科学模拟的一部分。 2D形状通过将(三角形)片段添加到先前生长的形状而生长。如何计算凸多面体和另一个多面体之间的交点?

Image explanation

注意,在3D实际段的厚度,因此,我的代码实际上三棱镜工作。

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

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

Wall diagram

在第一步骤中,我计算所有交点边缘面。然后,我使用3D中的CGAL Delaunay Triangulation软件包将合成点集合网格化为四面体网格。作为最后一步,我扔掉所有与先前插入的段相交的四面体。 这在大多数情况下都能很好地工作 - 但现在我确信这个想法不能用于基本原因。

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

回答

0

所以你正在寻找2个凸包的交集?

我认为你的正确,你的方法不适用于所有情况,但只适用于某些退化情况。例如,如果一个凸包完全位于另一个凸包中,那么不存在面/边交点。

一个更明显稳健的方法是从一个凸出的外壳开始,这个凸出的外壳足以包围你的两个外壳(所以基本上代表了所有的空间),然后对于你的两个凸包中的每个平面,把部分扔在“外面”。

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

+0

我会考虑你的方法。然而,有两件事:1.我不是在寻找交集,我实际上是在寻找所有(当然只有那些在附近的)先前插入的段的集合中的新段的补集。 如果我有交集,我仍然不得不从新的分段中减去它。 – Merlin