1.変換(transformations)
1.0.用語
簡単に用語の説明を書いておくが、詳しくは線形代数の教科書等を参考にすること。
・線形変換(liner transformation)
行列
による
なる変換(3次元座標から3次元座標への変換)、すなわち
から
への
のような変換は、線形変換である。
※
を行列,
をベクトル,
をスカラーとして
と書けるので。
・単位行列(indentity matrix)
対角要素が1で他の要素は0の行列。
で表す。
・対角行列(diagonal matrix)
対角要素以外が0。
, あるいは、
として、
と書くこともある。
・転置行列(transpose matrix)
行と列を入れ替えた行列。
に対して
が転置行列。
・逆行列(inverse matrix)
に対して、
であるような
。
・対称行列(symmetric matrix)
なる行列。対称行列は、いろいろ面白い性質がある。
・交代行列(skew symmetric matrix)
なる行列。
・内積の行列表現
・
(1×1の行列をスカラーと見なすなら)と書ける。ベクトルは行列の一種なので、内積を行列の掛け算風に書いておけば、行列の公式が適用できるようになって便利。(なこともある)
・外積の行列表現
内積を行列で表現すると便利であることがわかったので、外積も行列で書き換えることを考えておく。
: 外積の書き換えに使う行列。これは交代行列である。
=
![skew(\vec{W}) = \left[\begin{array}{l}0 -w_{z} w_{y}\\w_{z} 0 -w_{x}\\-w_{y} w_{x} 0\end{array}\right]](./funda01_images/math029.png)
・正規直交行列(orthonormal matrix)
なる行列R。固有ベクトルが単位長で、それぞれの固有ベクトルが直交するという面白い性質がある。早い話が回転行列なのだが。
1.1. スケーリング(scaling)
対角行列
で
が正なら、これはスケーリング行列。
なら拡大。
なら縮小。
一様スケーリング(uniform scaling)は、
。
1.2. 回転(rotation)
回転行列:
なる行列
。このとき
。
回転軸を
、回転角を
とすれば
として、
と書ける。
※ 軸として
をとっても同じ回転行列を示すことになるので、このような回転行列は一意には定まらない。
証明
の
軸方向の成分は、
(
・
)
の
と垂直成分は、
(
・
)
を
まわりに90゜回転させたベクトルは、
回転後のベクトルを「
の
と垂直成分」と「
を
まわりに90゜回転させたベクトル」の1次結合で表すと
「
の
と垂直成分」
「
を
まわりに90゜回転させたベクトル」

ここで、
であるから(この部分、証明面倒なのではしょる。興味のある人はやってみて)、

よって、回転行列 
1.3. 移動(translation)
移動は
なる固定ベクトル
を用いて
と表現できる。
のような線形変換では表すことは出来ない。しかし、4次元行列に拡張していいなら線形変換で表すことができる。
1.4. 同次変換(homogeneous transformations)
ベクトル(x,y,z)
を、(x,y,z,1)
にマップする。
(x,y,z,w)
は、超平面 w=1 への射影を考え(x/w,y/w,z/w,1)
にマップする。
こうしておけば、4次元ベクトルPの任意のスカラー倍が同じ点を表すことになる。
は、4次行列
を用いて
と表現できる。
また、
を
について解くと、

よって、
の逆行列
は、次のようになる。
![\text{ }H^{-1}=\left[\begin{array}{l}M^{-1} -M^{-1}T\\(\vec{0})^{t} 1\end{array}\right] =\left[\begin{array}{l}M_{11}^{-1}M_{12}^{-1}M_{13}^{-1} -(M^{-1}T)_{x}\\M_{21}^{-1}M_{22}^{-1}M_{23}^{-1} -(M^{-1}T)_{y}\\M_{31}^{-1}M_{32}^{-1}M_{33}^{-1} -(M^{-1}T)_{z}\\0 0 0 1\end{array}\right]](./funda01_images/math095.png)
2.座標系(Coordinate Systems)
互いに直交する単位ベクトル
を軸として、
なる行列を考える。この行列は正規直交行列(
)で、
ならば右手系,
ならば左手系となる。
標準的なユークリッドの座標系は右手系で 原点
軸
である。
この座標系によってベクトル
は、
と表される。
について解けば
, 特に
。
3. 4元数(Quaternions)
3.1. 4元数の代数
4元数は、
(
と
は実数)と書ける。
は虚数の単位。
。
の
を
と書けば、
と書け、4元数の和・差・積はベクトルの内積と外積を用いて次のように書ける。



この式から、
は
(すなわちこの2つのベクトルが平行)ならば成り立つことがわかる。また見てわかるように一般には、掛け算は非可換(
)である。
4元数の共役(conjugate)は、
。
このとき
ノルム(norm)は、次のように定義される

また、
ちなみに、



(特殊相対論の四元ベクトルの内積)
である。(実際に代入して確かめてもいいし、さきほどのベクトルの内積と外積で表してある式に代入して考えても良い)
となるような逆元(乗算上の逆数:multiplicative inverse of a quaternion)は、

の両辺を
で割れば、
なので 
4元数の実数部を取得する次の関数を用意しておく。

この関数は、
を満たす。
また、4元数を4次元ベクトル
と見なして内積を定義すると、

なるものを単位4元数(a unit quaternion)と呼ぶ。単位4元数の逆元や、単位4元数同士掛けたものもまた単位4元数である。
単位4元数は
とも書ける。(このとき
)
また、この形はオイラーの公式

に似ているが、実際、

が成り立ちます。これにより単位4元数のべき乗は、

と書ける。単位4元数の対数も同様に定義できる。

3.2. 4元数と回転の関係
単位4元数
は3次元上の軸
まわりの
の回転を表現している。この回転されたベクトルは
で表される。
以下で、これを証明する。
が回転であることを示すには次の4つが必要である。
1.
が3次元のベクトルであること
2.
の長さを保存していること
3.線形変換であること
4.鏡像成分(a reflection component)を持たないこと
※ この4つを示すかわりに、長さと角度と掌性が保存されることを示しても良い。
(それぞれの証明)
1.![W(R(\hat{v}))=W(q\hat{v}q^{*})=q[(\hat{v}+\hat{v}^{*})/2]q^{*}=qW(\hat{v})q^{*}=0](./funda01_images/math165.png)
2.
3.
4.(これ難しいので概略だけ)
単位長の3次元ベクトル
から、
(実数部が0の単位4元数)へマップする関数Mを考える。
。この逆変換を考えると
。もし、
ならば、合成変換
は、行列変換
に他ならない。ただしPは正規直交行列、なぜなら
は正規直交行列なので。
従って
で、このことは、固有値が1か−1であることを意味する。
が連続関数(continuous function)で
だから鏡像変換には成り得ない。
以上で、
が回転変換であることが示せた。
次に、これが
軸まわりの回転であることを示す。これは
がこの変換によって不変であることを示せば良い。
を利用すれば、

そして、これが角度
の回転であることを示す。
まず、
,
と
を右手系の正規直交ベクトルとする。つまり、それぞれ単位長で、
・
・
・
で 
ベクトル
は、ベクトル
に対して角度
だけ回転させられたとする。つまり、
。実数部が0の単位4元数に対しては
と
,
であることから、
![cos(\phi) = \hat{v}\text{・}(q\hat{v}q^{*}) =W(\hat{v^{*}}q\hat{v}q^{*})= W[-\hat{v}(cos\theta+\hat{u}sin\theta)\hat{v}(cos\theta-\hat{u}sin\theta)]=...=W[(cos\theta)^{2}-(sin\theta)^{2}-\hat{u}(2sin\theta cos\theta)]=(cos\theta)^{2}-(sin\theta)^{2}=cos(2\theta)](./funda01_images/math203.png)
よって、回転角は、
4元数 q と −qによる回転は、どちらも同じ回転を表す。
なぜなら
。
3.3. 軸回転(angle−axis)と回転行列との変換
軸回転から回転行列へ
を用いる。
なら反時計まわりの回転。
回転行列から軸回転へ
代数の公式
から、角度![\theta=cos^{-1}((trace(R)-1)/2)\in[0,\pi]](./funda01_images/math211.png)
1.θ=0のときは回転は行なわれないのでどの軸でもvalidである。
2.
のときは、二つ目の公式から、軸が直接求まる。
3.θ=
のときは、
=0になるので、この公式は役に立たない。この場合、
になることから、これを展開して、係数比較すれば解決する。
結論だけ書いておくと
のどの要素が一番大きいかによって3つの場合分けが必要となる。たとえば
が一番大きい要素である場合は、
を解いて

となる。
3.4. 4元数と軸回転(angle−axis)との変換
軸回転から4元数へ
と書けるので、
軸まわりのθラジアンの回転。
4元数から軸回転へ
なら
で任意軸での回転。
なら
3.5. 4元数と回転行列との変換
4元数から回転行列へ
を用いて展開する。
![R=\left[\begin{array}{l}1-2y^{2}-2z^{2} 2xy+2wz 2xz-2wy\\2xy-2wz 1-2x^{2}-2z^{2} 2yz+2wx\\2xz+2wy 2yz-2wx 1-2x^{2}-2y^{2}\end{array}\right]](./funda01_images/math228.png)
回転行列から4元数へ
先に出てきた
と
から、
, 
なら
で
を展開して 
これを解けば、
なら
x,y,zの一番大きいのを選んで解く。仮にxが一番大きいならば、
を解いて 
以下同様。
4. オイラー角(euler angels)
x軸まわりの回転
回転行列
,
ならば時計まわり。
平面
上の回転。
y軸まわりの回転
回転行列
,
ならば時計まわり。
平面
上の回転。
z軸まわりの回転
回転行列
,
ならば時計まわり。
平面
上の回転。
U軸まわりの回転
単位ベクトル
を軸とする回転
,
は単位行列。
平面
での回転。
4.1. 回転行列の分解(factoring rotation matrices)
軸での分解の仕方は、xyz,xzy,yxz,yzx,zxy,zyxの6通り。
例)
に分解。

に対して
と書くなら、
![R=\left[\begin{array}{l}r_{00} r_{01} r_{02}\\r_{10} r_{11} r_{12}\\r_{20} r_{21} r_{22}\end{array}\right]=\left[\begin{array}{l}c_{y}c_{z} -c_{y}s_{z} s_{y}\\c_{z}s_{x}s_{y} c_{x}c_{z}-s_{x}s_{y}s_{z} -c_{y}s_{x}\\-c_{x}c_{z}s_{y}+s_{x}s_{z} c_{z}s_{x}+c_{x}s_{y}s_{z} c_{x}c_{y}\end{array}\right]](./funda01_images/math264.png)
これと行列の要素を比較して各係数を確定させる。
なので 
・
ならば
このとき
同様に
, このとき 
・
ならば
このとき
![\left[\begin{array}{l}r_{10} r_{11}\\r_{20} r_{21}\end{array}\right]=\left[\begin{array}{l} c_{z}s_{x}+c_{x}s_{z} c_{x}c_{z}-s_{x}s_{z}\\-c_{x}c_{z}+s_{x}s_{z} c_{z}s_{x}+c_{x}s_{z}\end{array}\right]=\left[\begin{array}{l} sin\left(\theta_{z}+\theta_{x}\right) cos\left(\theta_{z}+\theta_{x}\right)\\-cos\left(\theta_{z}+\theta_{x}\right) sin\left(\theta_{z}+\theta_{x}\right)\end{array}\right]](./funda01_images/math274.png)
なので一意には定まらない。一例をあげれば、
。
・
ならば
このとき
![\left[\begin{array}{l}r_{10} r_{11}\\r_{20} r_{21}\end{array}\right]=\left[\begin{array}{l}-c_{z}s_{x}+c_{x}s_{z} c_{x}c_{z}+s_{x}s_{z}\\ c_{x}c_{z}+s_{x}s_{z} c_{z}s_{x}-c_{x}s_{z}\end{array}\right]=\left[\begin{array}{l} sin\left(\theta_{z}-\theta_{x}\right) cos\left(\theta_{z}-\theta_{x}\right)\\-cos\left(\theta_{z}-\theta_{x}\right) sin\left(\theta_{z}-\theta_{x}\right)\end{array}\right]](./funda01_images/math279.png)
以下同様。
参考文献
1.『3DGame EngineDesign』 , David H.Eberly , MORGANKAUFMANNPUBLISHERS ,ISBN1−55860−593−2.
2.『Mathematics for 3d Game Programming and Computer Graphics (Game Development Series)』 , Eric Lengyel , Charles River Media , ISBN 1−58450−277−0 .