4

3D空間に2つの正方形があります。それらの間のx、y、z角度を見つけたいです。私は両方の正方形の法線ベクトルを見つけることから始め、それらの間の角度を取得する方法を見つけようとしています。

XNA(C#)Vector3オブジェクトを使用しています。

次のように法線ベクトルを計算しました。

        Vector3 normal1 = (Vector3.Cross(sq1.corners[0] - sq1.corners[1], sq1.corners[0] - sq1.corners[2]));
        Vector3 normal2 = (Vector3.Cross(sq2.corners[0] - sq2.corners[1], sq2.corners[0] - sq2.corners[2]));

normal1がnormal2と同じ向きになるオイラー回転を見つけたい

4

1 に答える 1

9

まず、軸と回転量を計算できます (任意の軸を想定)。

Vector3 axis = Vector3.Cross(normal1, normal2);
axis.Normalize();
double angle = Math.Acos(Vector3.Dot(normal1, normal2) / normal1.Length() / normal2.Length());

法線が正規化されている場合、角度の計算は

double angle = Math.Acos(Vector3.Dot(normal1, normal2));

次に、ここの関数を使用して、これをオイラー角に変換できます

于 2012-05-22T17:25:57.977 に答える