【问题标题】:How to compute the intersection between a convex polyhedron and another polyhedron?如何计算凸多面体和另一个多面体之间的交集?
【发布时间】:2015-11-07 14:54:49
【问题描述】:

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

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

在某一时刻,这些 2D 形状(具有任何相对方向和位置)发生碰撞。

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

在第一步中,我计算了所有相交边到面。然后,我使用 3D 中的 CGAL Delaunay Triangulation 包对四面体网格中的结果点集进行网格划分。作为最后一步,我丢弃了所有与之前插入的线段相交的四面体。 这在大多数情况下都非常有效 - 但我现在确信,由于根本原因,这个想法行不通。

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

【问题讨论】:

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


    【解决方案1】:

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

    我认为您的正确方法并非在所有情况下都有效,而仅在某些退化的情况下有效。例如,如果一个凸包完全位于另一个凸包内,则没有面/边相交。

    一个更明显更稳健的方法是从一个足够大的凸包开始以包围你的两个外壳(所以基本上代表所有空间),然后对于你的两个凸包中的每个平面将这个外壳划分为那个平面,抛出去掉“外面”的部分。

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

    【讨论】:

    • 我会考虑你的方法。但是,有两件事: 1. 我不是在寻找交集,我实际上是在寻找新段与先前插入的所有(当然只有附近的那些)段的集合的补集。如果我有交叉点,我仍然必须从新段中减去它。
    猜你喜欢
    • 2021-05-25
    • 2018-06-14
    • 2017-12-04
    • 1970-01-01
    • 2019-12-03
    • 2015-08-03
    • 1970-01-01
    • 2014-10-13
    • 2013-05-23
    相关资源
    最近更新 更多