3D 空間に (OpenGL を使用してすべてをレンダリングする) 同じタイプのクラスの 2 つのオブジェクトがあります。これらのオブジェクトは、xyz オフセットと、標準の 4x4 回転行列を表す回転行列を格納します。
簡素化された例:
class object {
float rotMatrix[16];
float xyzTrans[3];
//a displaylist for drawing the object
}
UI コントロールに GLUI を使用しているため、変換をフォーマットで簡単に保存できます。
問題: あるオブジェクトに対して、他のオブジェクトに対して「正しい」向きを定義する必要があります。たとえば、最初のオブジェクトが z 軸の真下を向いていて、2 番目のオブジェクトが同じで、x 軸を中心に約 45 度回転している場合、これは「正しい」と見なされ、関数は必要なことを実行します。 . もちろん、これは異なる可能性があります。おそらく、同じ z でも x と y で回転したり、各軸を中心に少し回転したりすることさえあります。「正しい」回転の定義は、比較のためにオブジェクトに保存されます。
理想的には、次のようなことをしたいと思っています:
bool checkRotation(object* first, object* second) {
//do some comparison stuff
if (eachCheck < someTolerance)
return true;
return false;
}
2つの回転行列を比較することでこれを行うことは可能ですか? クォータニオンに変換して使用する必要がありますか?
この質問は、私が求めているものに最も近いものですが、混乱を招くほど異なっています。