Joe*_*ool 1 c++ math 3d polygon
我有一个由 3d 空间中的 3 个点定义的三角形。我还有一个由 3d 空间中的 2 个点定义的线段。我想知道它们是否相交。我真的不需要知道交点。
我不会任何微积分,但我知道一些三角函数。我对矩阵有一些了解,但我很了解向量(特别是 3d 向量)。请保持简单。
你能带我完成示例问题吗:
三角形:
一:-4, 3, 0
b: 4, 3, 0
c: -3, -5, 4
线段:
d: 1, -2, 0
e: -2, 6, 2
编辑:
我将在 c++ 物理引擎中使用它。
一个答案涉及从 4 个顶点计算四面体体积。请提供公式或在代码中显示。
更新:
正如 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) 的体积。那么只有当所有三个具有相同的符号时,de 才与三角形 (a,b,c) 相交。
如何从四面体的角坐标计算四面体的体积遍布网络,也在C中的计算几何中。