私が取り組んでいる 3D ゲーム エンジンでは、2 つの 3D 三角形が同じ平面上にあるかどうかを計算して、それに応じて表示する必要があります。3D 空間で三角形の角度を計算するにはどうすればよいですか?
表面法線を計算してそれらを比較すると、2 つの同等の法線が得られるでしょうか?
なぜあなたはそれをしたいのですか?テストする予定の三角形の数はいくつですか?リアルタイムレンダリングアルゴリズムでは少し複雑に思えます!
ともかく:
n
三角形の法線を計算します。次に、平面方程式を計算し
a.x + b.y + c.z + d = 0
ます(a,b,c)
。三角形の法線であり、d = - dot(n,P)
(Pは三角形の頂点の1つです)。2番目の三角形についても同じようにします。
4つの値abcd
が等しいか反対の場合(すべて一緒に)、2つの平面は同じです。
あなたが求めていることは、数値的に不可能です。丸め誤差は、そのようなテストを完全に無関係にします。
ただし、「2 つの三角形が同じ平面上にある場合、ある程度の許容範囲内であるかどうか」をテストしたい場合があります。これを行うのは非常に困難であり、ここでも丸め誤差により、考えられるすべての方法が台無しになる可能性があります。確かに、三角形が薄いときはいつでも、それらが住んでいる平面について大きな不確実性があります.
本当に必要な場合は、いくつかの文献を紹介することもできます ( CGALライブラリを見て、問題に関連するものが実装されているかどうかを確認するのが最善の策です)。任意の精度の浮動小数点、操作の巧妙な並べ替えが含まれる可能性が高く、とにかく不正確な結果につながります。
したがって、実際の問題に対する別のアプローチを見つけることを強くお勧めします。
3 つのポイントを通過する平面の方程式を計算してから、他の 3 つのポイントをテストしようとすると、丸め誤差が (大きな) 問題になります。別の解決策があります。
6 つの点の慣性行列を計算し、それを対角化し、その最小固有値が他の 2 つの固有値の小さな値の範囲内にあるかどうかを確認することができます。これは、許容範囲内で、6 つの点が実際には同じ平面上にあることを意味します。