我想确定一个给定的三角形是否与四面体相交。我不想计算解决方案多边形(如果存在)本身。是否有任何库/包/发布的实用算法可用于直接解决此问题(与我下面的尝试不同)?
我认为作为最后的手段,我将不得不使用标准的多边形 - 多边形交叉算法实现来解决间接这个问题。
我对此问题的尝试:
我想把它分解成多边形 - 多边形交叉的问题。因此,对于四面体和给定三角形T1
的每个三角形面(比如说T2
),我想到了以下几点:
L1
。 L2
,计算P
和L1
之间的交叉点L2
。L2
上,则L2
进行测试(可能使用参数形式)。 对于两个三角形T1
和T2
,存在交叉点P
所在的至少一个边缘,则表示三角形(因此给定的四面体和三角形T2
)做相交。
答案 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 )
中找到了一个函数来计算两个几何对象之间的交集。它允许Type1
和Type2
分别为Triangle_3<Kernel>
和Tetrahedron_3<Kernel>
。