2軸の回転を1つの行列に組み合わせる方法


8

ローテーションを実行するために使用する必要がある行列についてはすでに知っています。Z軸、X軸の順に回転する必要がある場合は、2つのステップで実行します。私の質問は、両方の回転を単一の行列に結合することは可能ですか?私はあなたのフィードバックに感謝します。

回答:


8

(この回答は基本的にはステファンのものと同じですが、行ベクトルと列ベクトル、および使用しているものを判別する方法についての詳細を追加したいと思います。)

はい、可能ですが、詳細はベクトルを行と列のどちらで表すかによって異なります。

列ベクトル

ベクトルを使用している場合は、通常、行列を乗算して変換します。

vector = mRotateZ * vector;
vector = mRotateX * vector;

もちろん、これは1つの手順で行うこともできます。

vector = mRotateX * mRotateZ * vector;

しかし、行列の乗算は結合的です。つまり、最初にどの乗算が実行されるかは問題ではありません。

A * B * C = (A * B) * C = A * (B * C)

だから私たちは書くことができます

Matrix mRotate = mRotateX * mRotateZ;
vector = mRotate * vector;

現在に相当する単一のマトリックス、作成した最初の周りを回転Zし、第二約をX。これは、任意の数の変換に対して簡単に一般化されます。変換は右から左に適用されることに注意してください。

行ベクトル

一方、ベクトルを使用している場合は、通常、行列を乗算します。

vector = vector * mRotateZ;
vector = vector * mRotateX;

ここでも、1つのステップでそれを書いて、

vector = vector * mRotateZ * mRotateX;

これは次のように書き換えることができます

Matrix mRotate = mRotateZ * mRotateX;
vector = vector * mRotate;

この場合、変換は左から右に適用されることに注意してください。


1
関連性のコメントは誤解しやすいので、私は非常にうんざりしています
joojaa

@joojaa正確には何を言っているのか分かりませんが、その点を明確にするために努力しました。
マーティンエンダー

素人があなたが物事を掛け合わせる順序と要素が掛けられる順序を分けるのは難しいです。
joojaa

そのため、連想的と可換的の違いを理解していません。したがって、乗算の順序について話すと、多くの人が可換性について考えるかもしれません
joojaa

6

はい、逆の順序で乗算します。

Matrix myrotation = Matrix.CreateRotationX(xrot) * Matrix.CreateRotationZ(zrot);

編集。 私の答えは、列ベクトルを使用している場合にのみ当てはまります。MartinBüttnerの詳細な回答を参照してください。


申し訳ありませんが、わかりません。「逆順」とはどういう意味ですか?
JORGE

1
z xの代わりにx x zを乗算します。
Stefan Agartsson、2015年

1
実際の順序は任意です。行ベクトルを使用してモデル化でき、列ベクトルをモデル化できます。計算は両方で同じ結果になりますが、乗算の順序が変更されます。しかし、はい、これはまさに正しい答えです。
joojaa

ジュジャ、はっきりさせてくれてありがとう!行行列は乗算の順序を逆にしたことを意味します、それは正しいですか?
Stefan Agartsson、2015年

3

数学から:

単位四元数からSO(3)(回転グループ)への2:1準同型があります。

これが(本質的に)意味することは、

  1. すべての向きを四元数として表すことができます
  2. 四元数は単一の回転を表します
  3. クォータニオンの乗算は、別のクォータニオン(クロージャ)を生成します。これは、回転を合成することと同じです。
  4. したがって、任意の回転数を1つの回転として表すことができます。

それについて考えてください。オブジェクト空間から始めて、1回の回転だけを使用してオブジェクトを任意の方向に回転させることができます。


四元数を取り込むことは、単なるランダムな数学ではないことを指摘しておきます。他の回答とは対照的に、グラフィックスで好まれるアプローチは、実際には回転をクォータニオンとして表すことです。なぜなら、それらはスペースをとらず、組み合わせるのが速いためです。

回転行列と四元数の間で変換する方法は、好みに応じてGoogleで簡単に設定できます。ポイントは、回転数学的な意味での四元数であるため、それらの組み合わせも単一の回転であることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.