对于我正在研究的3D游戏引擎,我需要计算两个3D三角形是否在同一平面上以相应地显示它。如何计算三维空间中三角形的角度?
计算表面法线并比较那些会给我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,将其对角化并查看其最小特征值是否在另外两个点的某个微小值内。这意味着你的六个点实际上位于同一平面上,在公差范围内。