我有一个由 3d 空间中的 3 个点定义的三角形。我还有一个由 3d 空间中的 2 个点定义的线段。我想知道它们是否相交。我真的不需要知道交点。
我不懂微积分,但我懂一些三角函数。我知道一些关于矩阵的知识,但我很了解 vector (特别是 3d vector )。请保持简单。
你能帮我解决一下示例问题吗:
三角形:
一个:-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 那架飞机然后投影到二维,求解二维的三角点问题。
另一种方法是计算四面体 (a,b,d,e)、(b,c,d,e) 和 (c,a,d,e) 的体积。然后只有当三个符号都相同时,才与三角形 (a,b,c) 相交。
如何根据角坐标计算四面体的体积 网络,也在Computational Geometry in C .
关于c++ - 如何知道线段是否与 3d 空间中的三角形相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53962225/