3Dプログラミング講座・その2:行列、マトリクス



同次座標がw,x,y,z,...の順番で定義されたものの説明です。順番が違うだけで、機能に変わりはありませんが・・・


・基本性質0
0-1.i×jの行列Mとは、第i行第j列の成分をMijで表すと

  |M00 M01 ... M0(n-1)|
  |M10 M11 ... M1(n-1)|
M=|... ... ... ...|
  |M(n-1)0 M(n-1)1 ... M(n-1)(n-1)|

i=jの行列を正方行列と呼び、i=jの成分を主対角成分と呼び、主対角成分以外0の正方行列を対角行列と呼ぶ。

0-2.i×jの行列Mをj×iの行列M.trans()にしたのがMの転置行列という

       |M00 M10... M(n-1)0|
       |M01 M11 ... M(n-1)1|
M.trans()=|... ... ... ...|
       |M0(n-1) M1(n-1) ... M(n-1)(n-1)|



・基本性質1
・行列にスカラー(実数)aを掛ける

1-1.

   |aM00 aM01 ... aM0(n-1)|
   |aM10 aM11 ... aM1(n-1)|
aM=|... ... ... ...|
   |aM(n-1)0 aM(n-1)1 ... aM(n-1)(n-1)|

また、後述の同次行列のときは、同次座標はa倍をせずに

1-2.
   |M00 M01 ... M0(n-1)|
   |M10 aM11 ... aM1(n-1)|
aM=|... ... ... ...|
   |M(n-1)0 aM(n-1)1 ... aM(n-1)(n-1)|

とします。



・基本性質2
・行列の和と差

2-1.

    |M00±N00 M01±N01 ... M0(n-1)±N0(n-1)|
    |M10±N10 M11±N11 ... M1(n-1)±N1(n-1)|
M±N=|... ... ... ...|
    |M(n-1)0±N(n-1)0 M(n-1)1±N(n-1)1 ... M(n-1)(n-1)±N(n-1)(n-1)|



・基本性質3
・行列の積
MのiとNのjが等しいときMNを掛け合わせることができ、その成分の計算は

3-1.(MN)ij=Σ↓(k=0)↑(m-1) MikNkj

3-2.単位行列IとはMI=IM=Mが成立する正方行列であり、それは

  |1 0 ... 0|
  |0 1 ... 0|
I=|... ... ... ...|
  |0 0 ... 1|

である。



・基本性質4
任意のスカラーa,bと任意の行列M,N,Oにおいて

4-1.M+N=N+M
4-2.(M+N)+O=M+(N+O)
4-3.a(bM)=(ab)M
4-4.a(M+N)=aM+aN
4-5.(a+b)M=aM+bM
4-6.(aM)N=a(MN)
4-7.(MN)O=M(NO)
4-8.(MN).trans()=N.trans()M.trans()



・基本性質5
・連立方程式

例えば
x-y+z=-5
2x+y-3z=19
3x+2y-z=16
の形で与えられていれば
|1 -1 1||x| |-5|
|2 1 -3||y|=|19|
|3 2 -1||z| |16|
とおけて、「行列 連立方程式解法」ででもググって解けば
|x| |2|
|y|=|3|
|z| |-4|
と解ける。



・基本性質6
・逆行列
MM^-1=M^-1M=Iを満たすM^-1が存在するとき、行列Mを正則行列と呼ぶ。
行列M^-1を行列Mの逆行列と呼ぶ。また、逆行列を持たない行列は非正則行列という。

6-1.0だけの行や列を持つ行列は正則ではない
6-2.行列Mが正則であればM.trans()も正則である
6-3.M,Nが正則であれば、積MNも正則であり、(MN)^-1=N^-1M^-1も成立する

逆行列の成分の求め方は「逆行列 求め方」でググってください。



・基本性質7
・行列式
正方行列の行列式は、成分から得られるスカラー量であり、逆行列があるかないかの判定等に使われる。

行列式の求め方は「行列式 求め方」でググってください。



・基本性質8
・固有値、固有ベクトル、対角化
これらを使って対角化をして、行列計算の簡略化等に使われます。

固有値、固有ベクトル、対角化の求め方は「固有値 固有ベクトル 対角化 求め方」でググってください。



・基本性質9
・直交行列
9-1.正則な正方行列MがM^-1=M.trans()を満足するとき、Mを直交行列と呼ぶ
9-2.ベクトル群V0,V1,...,V(n-1)が正規直交ならば、これらを順番に行や列に使った行列は直交行列である
9-3.直交行列Mは長さと角度を保存する



・基本性質10
・行列のトレース
10-1.トレースは同次座標成分以外の主対角成分の和である



・基本性質11
・スケーリング変換
それは以下のようになる。
11-1.

  |a 0 ... 0|
  |0 b ... 0|
P'=|... ... ... ...||P|
  |0 0 ... n|



・基本性質12
・任意軸周りの回転変換

単位ベクトルAの軸周りにベクトルPをθ回転するとき
ベクトルのページ、その1の8-1,8-2とAが単位ベクトルより

P.proj(A)=(A・P)A
P.prep(A)=P-(A・P)A

ここでP.prep(A)をθ回転したいのだから、A,Pの直交が外積ということも考えて

(P-(A・P)A)cosθ+(A×P)sinθ

これにP.proj(A)を加え

P'=Pcosθ+(A×P)sinθ+A(A・P)(1-cosθ)

以上より、まとめて、任意軸周りの回転変換は

12-1.
s=sinθ,c=cosθ,c1=1-cとするとき
        |c+A0^2c1   A0A1c1-A2s A0A2c1+A1s|
P.rot(A,θ)=|A1A0c1+A2s c+A1^2c1   A1A2c1-A0s||P|
        |A2A0c1-A1s A2A1c1+A0s c+A2^2c1|

また、これは回転ベクトルRV[θ,R0,R1,R2]で|R|のノルムが1のときの変換と同じである。
この逆変換はロドリゲスの公式より、3×3行列mとすると

12-2.
tr = m.trace()
if(tr < -1.0) {
 m = m/(-tr)
 tr = m.trace()
}
θ = acos((tr - 1) / 2)
R = [m21 - m12,
   m02 - m20,
   m10 - m01]

である。



・基本性質13
・同次座標

3次元ベクトルに対し3×3行列で扱うと平行移動成分が保存しにくい(?できない?)。
したがって、その簡潔な表現のため余剰次元wを付け加えたのが同次座標である。

13-1.行列M、ベクトルP、平行移動ベクトルT(もちろん、これらは同次ではない)とすると同次座標変換Nは次で与えられる

P'=MP+Tという形式で変換したいから

  |1 0 0 0|
  |T0 M00 M01 M02|
N=|T1 M10 M11 M12|
  |T2 M20 M21 M22|

Mijは回転変換成分
Tkは平行移動成分
N0行はw成分行
N1行は回転行列(ローカル座標系)のx軸成分行
N2行は回転行列(ローカル座標系)のy軸成分行
N3行は回転行列(ローカル座標系)のz軸成分行

となる。

13-2.また、任意の同次ベクトルV、同次行列Mは、V0、M00、つまり、w(13-1.では1)で全体を割ってやれば、標準化できる。


・基本性質14
・回転ベクトル

後述のクォータニオンとも深い関係があるが
同次座標(4×4)は回転軸ベクトル(3)と回転角度の4つで保存できる
それを基本性質12を基に求めたものが回転ベクトルである

12-2項でも触れたが
回転行列の逆変換はロドリゲスの公式より、3×3行列mとすると

12-2.
tr = m.trace()
if(tr < -1.0) {
 m = m/(-tr)
 tr = m.trace()
}
θ = acos((tr - 1) / 2)
R = [m21 - m12,
   m02 - m20,
   m10 - m01]

である。

Rがゼロベクトルになると回転ベクトルが求められないので
その時は回転行列からクォータニオンに変換して
クォータニオンの回転軸と回転角度を求めるといい

回転ベクトルを回転行列にするのは以下である

12-1.
s=sinθ,c=cosθ,c1=1-cとするとき
        |c+A0^2c1   A0A1c1-A2s A0A2c1+A1s|
P.rot(A,θ)=|A1A0c1+A2s c+A1^2c1   A1A2c1-A0s||P|
        |A2A0c1-A1s A2A1c1+A0s c+A2^2c1|







3Dプログラミング講座
NAS6LIB
ポリゴンテスト解説・x3dom使い方
その1:ベクトル
その2:行列
その3:クォータニオン
その4:基本総復習・実践
その5:応用その1・メッシュアニメーション、動的テクスチャ
その6:応用その2・GLSL、カスタムシェーダー、キーボード、ファイル
その7:応用その3・ゲームプログラミング、タグの動的追加
その8:応用その4・GLSL、シェーダー、その2

<<prev ベクトル : クォータニオン next>>





戻る