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|