我有一个在3d空间中由3个点定义的三角形。我也有在3d空间中由2个点定义的线段。我想知道它们是否相交。我真的不需要知道交叉点。
我不知道任何微积分,但我知道一些触发。我对矩阵有些了解,但我对向量非常了解(特别是3d向量)。请保持简单。
您能否引导我解决示例问题:
三角形:
a:-4、3、0
b:4、3、0
c:-3,-5、4
线段:
d:1,-2、0
e:-2、6、2
编辑:
我将在c ++物理引擎中使用它。
一个答案涉及从四个顶点计算四面体体积。请提供公式或在代码中显示。
更新:
正如meowgoesthedog指出的那样,我可以尝试使用Moller-Trumbore相交算法。请参阅下面的替代解决方案。
这是解决问题的一种方法。计算四面体的体积Td =(a,b,c,d)和Te =(a,b,c,e)。如果Td或Te的体积为零,则段de的一个端点位于包含三角形(a,b,c)的平面上。如果Td和Te的体积具有相同的符号,则de严格位于一侧,并且不存在交集。如果Td和Te具有相反的符号,则de越过包含(a,b,c)的平面。
从那里有几种策略。一种是计算de越过该平面的点p。然后投影到2D,并解决2D中的三角形问题。
另一种方法是计算四面体(a,b,d,e),(b,c,d,e)和(c,a,d,e)的体积。只有三个符号都相同时,才使三角形(a,b,c)相交。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句