我正在开发一个3D游戏引擎,需要计算两个三角形是否在同一平面上,以便相应地显示它。如何计算3D空间中三角形的角度?
计算表面法线并比较它们是否会给我两个等价的法线?
你所要求的在数值上是不可能的,舍入误差会使这样的测试完全无关紧要。
然而,你可能想测试“如果两个三角形在同一个平面内,容忍度范围内”。这非常困难,而且在这里,舍入误差很可能会破坏任何可能的方法。实际上,每当三角形变薄时,它们所在的平面存在很大的不确定性。
如果你真的想要,我可以向你指出一些文献(你最好查看CGAL库,并查看它们是否实现了与你的问题相关的内容)。任何东西都可能涉及任意精度浮点数、聪明的操作重新排序,并且总会导致不准确的结果。
因此,我强烈建议你为你的实际问题找到另一种方法。
如果你试图计算通过三个点的平面方程,然后测试另外三个点的话,舍入误差是一个(巨大的)问题。还有另一种解决方案。
你可能想计算六个点的惯性矩阵,对其进行对角化,并查看最小特征值是否在另外两个特征值的某些微小值范围内。这将意味着你的六个点实际上位于同一平面上,容忍度内。