测试四面体 - 三角形交叉点

时间:2014-06-07 13:08:15

标签: algorithm computational-geometry

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

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

我对此问题的尝试:
我想把它分解成多边形 - 多边形交叉的问题。因此,对于四面体和给定三角形T1的每个三角形面(比如说T2),我想到了以下几点:

  1. 计算与每个三角形对应的平面之间的交点(一条线),比如L1
  2. 对于每个三角形:
    1. 对于三角形的每个边缘说L2,计算PL1之间的交叉点L2
    2. 如果点位于边L2上,则L2进行测试(可能使用参数形式)。
  3. 对于两个三角形T1T2,存在交叉点P所在的至少一个边缘,则表示三角形(因此给定的四面体和三角形T2相交。

2 个答案:

答案 0 :(得分:1)

根据三角形创建一个标准正交框架(某些顶点的原点,X轴使用某一侧的方向,轴Y和Z使用另一侧的方向和Gram-Schmidt公式)。

将3 + 4顶点的坐标转换为新帧。

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

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

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

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

答案 1 :(得分:0)

我刚刚在CGAL库CGAL::do_intersect(Type1< Kernel > obj1,Type2< Kernel > obj2 )中找到了一个函数来计算两个几何对象之间的交集。它允许Type1Type2分别为Triangle_3<Kernel>Tetrahedron_3<Kernel>