行列の説明 (または画像) と、平行移動、回転、拡大縮小を行ったときに行列がどのように変化するかを探しています... (1 つのセルには sin(角度) があり、もう 1 つのセルには移動の x 座標があります)
1 に答える
今のところ、平行移動は無視してください。これは、回転と拡大縮小よりも少しトリッキーな概念です。
これについて考える方法は、各行列が基底ベクトルの変化を定義するということです。標準的な座標系が与えられると、基底ベクトルは(1,0,0)
、(0,1,0)
およびになり(0,0,1)
ます。今のところ、概念が続くので 2D システムを仮定しますが、作業は簡単です。
また、列優先を想定しています。ただし、OpenGL が実際にこれを使用しているかどうかは思い出せないので、まずこれを確認し、必要に応じて行列を転置してください。
基底ベクトルは、前に定義したように、行列形式で表すことができます。これは、各ベクトルを行列の列として配置するだけです。したがって、基底ベクトルから基底ベクトルに変換する (つまり、変更なし) には、次の行列を使用します。これは、入力に対して何もしないため、「恒等行列」とも呼ばれます (*1 が乗算の恒等であるのと同様)。
2D 3D
(1 0) (1 0 0)
(0 1) (0 1 0)
(0 0 1)
完全を期すために 3D バージョンを含めましたが、それは私が 3D を取る限りです。
スケール マトリックスは、軸を「引き伸ばす」と見なすことができます。軸が 2 倍の大きさの場合、それらの間隔は 2 倍離れているため、コンテンツは大きくなります。これを例に取ります
(2 0)
(0 2)
これにより、基底ベクトルが から(1, 0)
および(0, 1)
に変更さ(2, 0)
れ(0, 2)
、形状全体が 2 倍の大きさになります。概略的には、以下を参照してください。
Before After
6| 3|
5| |
4| 2|-------|
3| | |
2|--| 1| |
1|__|___________ |_______|______
0 1 2 3 4 5 6 7 0 1 2 3
回転についても同じことが起こりますが、代わりに異なる値を求めます。回転行列の値は次のとおりです。
(cos(x) -sin(x))
(sin(x) cos(x))
これにより、各軸が angle を中心に効果的に回転しますx
。これを本当に理解するには、トリガーをブラッシュアップして、各列が新しい基底ベクトルであると想定してください;)。
さて、翻訳は少しトリッキーです。このために、行列の最後に追加の列を追加します。他のすべての操作では1
、最後の行に があります (つまり、フォームの ID です)。翻訳のために、これを次のように記入します。
(1 0 x)
(0 1 y)
(0 0 1)
これは 3D 形式ですが、慣れ親しんだ形式ではありません。モデルが に存在すると仮定すると、これを Z 基底座標を移動するものとしてモデル化できます (ここでは 2D で作業していることを思い出してください!) Z=1
。これは効果的に形状をゆがめますが、ここでも 2D で作業しているため、平面化されているため、3 次元は認識されません。ここで 3D で作業していた場合、これは実際には次のように 4 番目の次元になります。
(1 0 0 x)
(0 1 0 y)
(0 0 1 z)
(0 0 0 1)
繰り返しますが、「4 次元」は見えませんが、代わりにそれに沿って移動して平らにします。最初に 2D 空間で理解してから、推定してみると簡単です。3D 空間では、この 4 番目の次元ベクトルは と呼ばれるw
ため、モデルは暗黙的に にありますw=1
。
お役に立てれば!
編集: 余談ですが、このページは翻訳マトリックスを理解するのに役立ちました。まともな図がいくつかあるので、もっと役立つことを願っています: http://www.blancmange.info/notes/maths/vectors/homo/