计算两个3D三角形是否在同一平面上

时间:2010-09-16 10:10:55

标签: 3d rotation geometry angle normals

对于我正在研究的3D游戏引擎,我需要计算两个3D三角形是否在同一平面上以相应地显示它。如何计算三维空间中三角形的角度?

计算表面法线并比较那些会给我2个等效法线吗?

2 个答案:

答案 0 :(得分:3)

你为什么要这样做?您希望测试的三角形数量是多少?对于实时渲染算法来说,这似乎有点复杂!

反正:

计算三角形的正常n。然后计算平面方程: a.x + b.y + c.z + d = 0 (a,b,c)是您的三角法线和d = - dot(n,P)(P是您的三角形顶点之一)。对第二个三角形做同样的事情。

如果四个值abcd等于或相反(全部在一起),则两个平面相同。

答案 1 :(得分:2)

你要问的是数字上不可能的。舍入错误将使这样的测试完全无关紧要。

但是,您可能希望测试“两个三角形是否在同一平面上,在某个公差范围内”。这很难做到,在这里,舍入错误可能会破坏任何可能的方法。实际上,每当三角形变薄时,它们所居住的平面就会有很大的不确定性。

如果你真的想要,我可以给你一些文章(你最好的选择是查看CGAL库,看看他们是否实现了与你的问题相关的东西)。任何事情都可能涉及任意精确浮点,巧妙地重新排序操作,并且无论如何都会导致不准确的结果。

因此我强烈建议您为实际问题找到另一种方法。

如果您尝试计算通过三个点然后测试其他三个点的平面方程,则舍入误差是一个(巨大的)问题。还有另一种解决方案。

您可能想要计算六个点的inertia matrix,将其对角化并查看其最小特征值是否在另外两个点的某个微小值内。这意味着你的六个点实际上位于同一平面上,在公差范围内。