Algorithm 四面体三角形相交的检验

Algorithm 四面体三角形相交的检验,algorithm,computational-geometry,Algorithm,Computational Geometry,我想确定给定的三角形是否与四面体相交。我不想计算解决方案多边形(如果存在)本身。是否有任何库/包/已发布的实用算法可用于直接解决此问题(与我下面的尝试不同) 我认为作为最后的手段,我将不得不使用标准多边形相交算法实现来间接解决这个问题 我对这个问题的尝试: 我想把它分解成多边形相交的问题。因此,对于四面体的每个三角形面(比如说T1)和给定的三角形T2,我考虑执行以下操作: 计算每个三角形对应的平面之间的交点(一条线),例如L1 对于每个三角形: 对于三角形的每条边,比如说L2,计算L1和L2之间

我想确定给定的三角形是否与四面体相交。我不想计算解决方案多边形(如果存在)本身。是否有任何库/包/已发布的实用算法可用于直接解决此问题(与我下面的尝试不同)

我认为作为最后的手段,我将不得不使用标准多边形相交算法实现来间接解决这个问题

我对这个问题的尝试:
我想把它分解成多边形相交的问题。因此,对于四面体的每个三角形面(比如说
T1
)和给定的三角形
T2
,我考虑执行以下操作:

  • 计算每个三角形对应的平面之间的交点(一条线),例如
    L1
  • 对于每个三角形:
  • 对于三角形的每条边,比如说
    L2
    ,计算
    L1
    L2
    之间的交点
    P
  • 如果点位于边缘
    L2
    ,则测试
    L2
    (可能使用参数形式)

  • 如果对于两个三角形
    T1
    T2
    ,至少存在一条相交点
    p
    所在的边,则表示三角形(以及给定的四面体和三角形
    T2
    )确实相交。

    我刚在CGAL库中找到一个函数,用于计算两个几何对象之间的相交。它允许
    Type1
    Type2
    分别为和。

    基于三角形创建正交框架(原点在某个顶点,X轴使用某一侧的方向,Y轴和Z轴使用另一侧的方向和Gram Schmidt公式)

    将3+4个顶点的坐标变换到新帧

    如果四个四面体顶点的所有Z都具有相同的符号,则不存在交点。否则,通过Z上的线性插值,找到边到XY的3或4交点

    现在您需要检查三角形和三角形或(凸)四边形之间的交点,在2D中。你们可以通过一个标准来解决这个问题,这个标准通过多边形的凸性变得简单

    作为一个简单的优化,请注意,在知道可能存在交点之前,计算三角形顶点的Z(=0)和四面体顶点的XY是无用的


    您还可以通过首先使用边界框测试来加速多边形相交过程。

    由于几何实体的凸性,您可以将问题转换为7个正未知数的线性程序,其中D方程表示允许的点属于四面体和三角形的内部。用单纯形算法求解。@YvesDaoust请详细说明这7个未知数是什么?顶点凸组合的权重(3表示三角形,4表示四面体)@依我所知,这个四面体三角形相交问题可以转化为一个线性可行性问题,其中约束方程可以是:alphaP{tet}=betaP{tri},其中alpha,beta分别是四面体和三角形点的权向量,P{tet}和P{tri}分别是四面体和三角形的坐标向量,就是这样。当线性问题可行时,存在一个交集。从代数角度讲,通过评估多个4x4行列式的符号(“我在这个平面的哪一边?”=“单形的符号体积”)并讨论结果,问题得以解决。这和我在回答中使用的机器是一样的(可能还有边界盒测试),其中部分工作在二维空间中进行,使用3x3行列式。我认为这不是一个有效的解决方案。我在2D中描述了一个反例,其中没有交叉点,但您的方法将报告一个交叉点。三角形是线段,四面体是三角形。@Gus:你误解了我的解决方案。如果你能解释一下我的误解,或者澄清一下你的解决方案,那会有帮助的。