行列変換
行列の演算の基本、およびそれを利用した座標変換(拡大縮小及び回転移動)について説明します。

<注意>
このページでは、数式を表示するためにMathJaxを使用しています。ブラウザの設定でスクリプト実行をブロックしている場合、ページ内の数式が正しく表示されません。

行列の基礎
行列(matrix)とは、要素(element)を矩形状に並べ、それを括弧でくくったように書かれるものです。ここで、横の並びを行(row)といい、縦の並びを列(column)と言います。例えば、次の行列はいずれも2行3列の行列、あるいは2x3の行列と言います。

\[\begin{array}{ll}
A=\pmatrix{
a_{11} & a_{12} & a_{13}\\
a_{21} & a_{22} & a_{23}} &
B=\pmatrix{
1 & 6 & -2\\
-3 & 0 & 4}
\end{array}\]
行の数も列の数も$\ n \ $である行列、すなわち、$\ n\times n \ $の行列を$\ n\ $次の正方行列と言います。また、次のような特別な行列があります。

定義 (零行列)
すべての要素が0である行列を零行列といい、$\ O\ $で表す。

定義 (単位行列)
$n\ $次正方行列のうち、$\ m\ $行$\ m\ $列の成分がすべて1であり、それ以外の要素がすべて0であるようなものを、$\ n\ $次単位行列と言い、$\ E_n\ $で表す。

また、行列はベクトル演算ともかかわりがあり、次のように行ベクトルおよび列ベクトルを定義します。

定義 (行ベクトル・列ベクトル)
$\ 1\times n \ $の行列を行ベクトルという。
$\ n\times 1 \ $の行列を列ベクトルという。

さらに、任意の行列に対して、次のように区分行列と呼ばれるものを考えることができます。

定義 (区分行列)
任意の大きさの行列に対し、その行列をより小さな行列を要素とする行列と考えたとき、その各々を元の行列の区分行列という。

行列の演算
実数に対して四則演算を考えることができるように、行列にも和、差、積を考えることができます。

定義
同じ型の行列$\ A,\ B\ $に対し、その和と差を次のように定義する。
\[
A\pm B=\pmatrix{
a_{11}\pm b_{11} & a_{12} \pm b_{12} & \cdots & a_{1n}\pm b_{1n}\\
a_{21}\pm b_{21} & a_{22} \pm b_{22} & \cdots & a_{1n}\pm b_{2n}\\
\vdots & \vdots & \ddots & \vdots\\
a_{m1}\pm b_{m1} & a_{m2} \pm b_{m2} & \cdots & a_{mn}\pm b_{mn}\\
}\]

和と差は同じ場所にある成分同士を足すか引くかするだけですので非常に単純です。ただし、大きさの異なる行列同士では和と差は定義できないことに注意してください。
行列のスカラー倍(定数倍)は次のように定義されます。これもすべての成分を定数倍するだけですので非常にわかりやすいです。

定義
任意の行列$\ A\ $に対し、そのスカラー倍を次のように定義する。
\[
kA=\pmatrix{
ka_{11} & ka_{12} & \cdots & ka_{1n}\\
ka_{21} & ka_{22} & \cdots & ka_{1n}\\
\vdots & \vdots & \ddots & \vdots\\
ka_{m1} & ka_{m2} & \cdots & ka_{mn}\\
}\]

一方で、行列同士の積は和と差に比べるとかなり複雑です。

定義
$m \times n\ $行列$\ A\ $および$\ n \times l\ $行列$\ B\ $に対し、その積を次のように定める。
\[
AB=\pmatrix{
c_{11} & c_{12} & \cdots & c_{1l}\\
c_{21} & c_{22} & \cdots & c_{1l}\\
\vdots & \vdots & \ddots & \vdots\\
c_{m1} & c_{m2} & \cdots & c_{ml}\\
},\
c_{ij}=\sum_{k=1}^n{a_{ik}b_{kj}}
\]

行列同士の積ABは、Aの列の数とBの行の数が同じ時のみ定義されます。なお、積を計算するとき、それぞれの行列を適当な区分行列に区切り、区分行列の行列として積を計算しても同じ結果が得られます。
さて、行列の演算に関して、次のような性質があります。

定理
それぞれの演算が定義できるように選んだ任意の行列に対し、次の性質が存在する。
\[\begin{array}{ll}
\mbox{・和は常に可換:} & A+B=B +A\\
\mbox{・和は常に結合的:} & (A+B)+C=A+(B+C)\\
\mbox{・積は一般に非可換:} & AB \not= BA\\
\mbox{・積は常に結合的:} & (AB)C = A(BC)\\
\mbox{・積は加法の上に常に分配的:} & (A+B)C=AC+BC,\ A(B+C)=AB+AC\\
\mbox{・単位行列との積は常に可換:} & AE=EA=A\\
\mbox{・零行列との積は常に可換:} & AO=OA=O
\end{array}\]

行列式と逆行列
行列の和、差、積について説明しましたが、では商はないのかという疑問が沸きます。行列の商と呼ばれるものはありませんが、それに似たようなものは正方行列に限り定義することができます。

行列の「商のようなもの」を定義するためには逆行列と呼ばれる行列を求める必要があるのですが、逆行列を求めるためには行列式と呼ばれるものを定義する必要があります。しかし、一般的に行列式の定義は非常に難解なため、以下では2次正方行列に絞って説明します。

定義 (行列式)
一般に、$\ n\ $次正方行列$\  A\ $に対して、その行列式$\ \det(A)\ $を次のように定義する。
\[
\det(A) = \sum_{\sigma \in \mathfrak{S}_n}\operatorname{sgn}(\sigma) \prod_{i = 1}^n a_{i \sigma(i)}
\]特に、2次正方行列$\ A=\pmatrix{a & b\\ c & d}\ $については、$\ \det(A)=ad-bc\ $である。

一般に、正方行列の逆行列は次のように定義されます。

定義 (正則行列・逆行列)
一般に、$\ n\ $次正方行列$\  A\ $に対して、$ \ AB=BA=E_n\ $を満たすような行列$\ B\ $が存在するとき、$\ A\ $は正則であるという。
正則な行列$\ A\ $に対し、この行列$\ B\ $はただ一つに定まり、これを$\ A\ $の逆行列という。

行列式を用いることで、2次正方行列$\ A=\pmatrix{a & b\\ c & d}\ $の逆行列$\ A^{-1}\ $は次のように書かれます。なお、行列式は$\ |A|\ $のようにも書かれます。一般の逆行列も行列式が0でない限りにおいて定義できますが、その表示は非常に複雑なためここでは取り上げません。

定理
二次正方行列$\ A=\pmatrix{a & b \\ c & d}\ $の逆行列は、$\ |A|\not=0\ $である限り定義され、次のようにあらわされる。
\[
A^{-1}=\cfrac{1}{|A|}\pmatrix{d & -b\\ -c & a}
\]

逆行列と行列式について、次のような性質があります。

定理
任意の同次の正方行列$\ A,B\ $と単位行列$\ E\ $に対して、次の式が常に成り立つ。
\[
|E|=1\\
|AB|=|A||B|\\
|A^{-1}|=\cfrac{1}{|A|}\\
AA^{-1}=A^{-1}A=E\\
\]

固有値・固有ベクトル
行列は線型変換と呼ばれる操作に関わっており、それを理解するうえで固有値および固有ベクトルという概念が必要になります。

定義 (固有値・固有ベクトル)
線型変換$\ A\ $において、$\ A\Bbb x=\lambda\Bbb x\ $を満たすような0でないベクトル$\ \Bbb x\ $を、この線型変換の固有ベクトル、定数$\ \lambda\ $を固有値という。

言葉だけでは足りないので、実際に適当な値を入れて計算をしてみます。

例題
行列$\ A=\pmatrix{1 & -1\\ 2 & 4}\ $において、その固有値と固有ベクトルを求めよ。

$A\Bbb x=\lambda\Bbb x\ $の両辺に単位行列を掛けても意味は変わらないので、
$(A-\lambda E)\Bbb x=O\ $という式が導かれる。
この方程式が0でない解を持つためには、$\ |A-\lambda E|=0\ $でなければならない。よって、
$ |A-\lambda E|=\det\left( \pmatrix{1 & -1\\ 2 & 4}-\lambda\pmatrix{1 & 0\\ 0 & 1}\right)=(\lambda-3)(\lambda-2)=0\ $
したがって、この行列$\ A\ $の固有値は、$\ \lambda=2,3\ $である。

$\lambda=2\ $のとき、固有ベクトル$\ \Bbb x=\pmatrix{x\\y}\ $は、
$(A-2E)\Bbb x=\pmatrix{-1 & -1\\ 2 & 2}\pmatrix{x\\ y}=\pmatrix{-x-y\\ 2x+2y}=O\ $より、
$\ \Bbb x=\pmatrix{k\\ -k}\ $である。
$\lambda=3\ $のとき、固有ベクトル$\ \Bbb x=\pmatrix{x\\y}\ $は、
$(A-3E)\Bbb x=\pmatrix{-2 & -1\\ 2 & 1}\pmatrix{x\\ y}=\pmatrix{-2x-y\\ 2x+y}=O\ $より、
$\ \Bbb x=\pmatrix{k\\ -2k}\ $である。

固有値は、この線型変換の固有ベクトル方向の拡大率を表します。すなわち、固有値が1であるような線型変換は、その固有ベクトル方向の元の大きさを保つような変換となります。また、固有ベクトルは、この線型変換によって向きの変わらない方向を意味します(ただし固有値が負であれば原点に関して反転はする)。固有ベクトル方向でないベクトルは、一般的に線型変換によって大きさも向きも変わってしまいます。

拡大変換と回転移動
行列が一次変換(線型変換)を表すことはすでに説明しましたが、その中でも特に重要な拡大変換と回転移動について説明します。
拡大変換とは、文字通り、元の図形の形を保ったまま、その大きさだけを変える線型変換です。拡大変換の特殊な例として、恒等変換があり、これは形も大きさも保ったままであるような、つまり結局は「何もしない」変換です。

定理 (恒等変換)
任意の$\ n\ $次元空間ベクトルに対し、$\ n\ $次元単位行列$\ E_n\ $は恒等変換をあらわす。

これを踏まえると、大きさを$\ k\ $倍に拡大するような拡大変換は、次のようになります。

定理 (拡大変換)
任意の$\ n\ $次元空間ベクトルに対し、$\ n\ $次元単位行列のスカラー倍$\ kE_n\ $は、拡大変換をあらわす。
任意の$\ n\ $次元空間ベクトルに対し、線型変換$\ A\ $のスカラー倍$\ kA\ $は、元の線型変換$\ A\ $についての拡大変換をあらわす。

なお、倍率が負の場合は180度ひっくり返り、大きさは倍率の絶対値倍されることは容易にわかります。
次に原点の周りの回転移動を考えます。$\ n\ $次元で定義できますが、ここでは2次元、すなわち平面だけを考えます。

定理 (回転移動)
任意の平面ベクトルに対し、線型変換$\ \pmatrix{\cos\phi & -\sin\phi\\ \sin\phi & \cos\phi}\ $は、座標平面の原点を中心とし、反時計回りに$\ \phi\ $回転する回転移動をあらわす。

これは実際に適当な点を座標平面にとって計算してみると、たしかに回転されていることが分かると思います。なお、拡大縮小する場合は、例によってスカラー倍するだけです。
なお、複数の一次変換を続けて行ったとき、この一連の操作を合成変換と言います。合成変換について、次のような性質があります。

定理 (合成変換)
任意の変換$\ A\ $および$\ B\ $を、この順番で行った合成変換は、行列$\ BA\ $であらわされる。
行列の積の非可換性から、合成変換も同様に非可換である。
拡大変換および回転移動は互いに可換な変換である。すなわち、拡大してから回転したものと、回転してから拡大したものは常に同じ変換をあらわす。

対称移動
図形をある直線(軸)を中心として反転させるような移動を対称移動といいます。座標平面上の座標軸に関する対称移動は次のようにあらわされます。

定理 (軸に関する対称移動)
変換$\ \pmatrix{1 & 0\\ 0 & -1}\ $は、座標平面の$\ x\ $軸に関する対称移動をあらわす。
変換$\ \pmatrix{-1 & 0\\ 0 & 1}\ $は、座標平面の$\ y\ $軸に関する対称移動をあらわす。

座標軸ではなく、ほかの任意の直線に関して対称移動を考える場合、回転移動と軸に関する対称移動との合成変換として考えることができます。
たとえば、直線$\ y=\sqrt{3}x\ $(原点を通り、$\ x\ $軸とのなす角が$\ \cfrac{\pi}{3}\ $である直線)に関する対称移動は、次の3つの変換に分解して考えることができます。

例題
直線$\ y=\sqrt{3}x\ $に関する対称移動をあらわす行列を求めよ。

求める行列のあらわす変換は、$\ -\cfrac{\pi}{3}\ $回転移動し、$\ x\ $軸に関して対称移動し、$\ \cfrac{\pi}{3}\ $回転させる合成変換と同じである。よって、求める行列は、
\[
\pmatrix{\cos\cfrac{\pi}{3} & -\sin\cfrac{\pi}{3}\\ \sin\cfrac{\pi}{3} & \cos\cfrac{\pi}{3}}
\pmatrix{1 & 0\\ 0 & 1}
\pmatrix{\cos\left(-\cfrac{\pi}{3}\right) & -\sin\left(-\cfrac{\pi}{3}\right)\\ \sin\left(-\cfrac{\pi}{3}\right) & \cos\left(-\cfrac{\pi}{3}\right)}=
\cfrac{1}{2}\pmatrix{-1 & \sqrt{3}\\ \sqrt{3} & 1}
\]

一般に、図形を直線$\ y=(\tan\phi)x\ $に関して対称移動する変換は、次のようにあらわされます。上の例題と同様に考えて確かめてみてください。

定理 (原点を通る直線に関する対称移動)
変換$\ \pmatrix{\cos2\phi & \sin2\phi\\ \sin2\phi & -\cos2\phi}\ $は、直線$\ y=(\tan\phi)x\ $に関する対称移動をあらわす。

アフィン変換
ここまで、図形を拡大・縮小したり、回転させたりすることは説明しましたが、まだ一つ基本的な操作が抜けています。言うまでもなく平行移動です。
実は2次元の図形を(その形を保って)平行移動させるような変換をあらわす2x2行列はありません。したがって数学的には線型変換を行列変換によって行い、平行移動はベクトル演算で行うことが普通です。しかし、3x3の行列を使うと2次元の図形を平行移動する変換を記述することができます。少し不思議な感じがしますが、操作したい図形より1つ次元の高い行列を使うと、ここまで説明した線型変換のすべての操作に加え、平行移動もできるのです。実際に3Dゲームでも、3次元図形の変換に際して、同じようにひとつ次元の高い4次元の行列が使用されます(3次元の行列ですら計算がやや煩雑なため、ここでは4次元行列は扱いませんが)。
2次元の図形に対して、アフィン変換を施す場合には、次のアフィン行列を使用します。

アフィン行列
$\ \pmatrix{a & b & c\\ d & e & f\\ 0 & 0 & 1}\ $をアフィン行列と言う。

3行目は必ず 0 0 1 の形になります。この行は本質的には何の意味も持たず、単に行列演算がきちんと定義できるようにするためだけに存在しているものです。
実際の変換操作に際して意味を持つのは1, 2行目の部分だけです。

ではこのアフィン行列を使って図形を変形していくのですが、その前にしておかなければならないことがあります。今は2次元で考えていますから、座標はX座標とY座標の2つのパラメータのみで構成されています。しかし、3x3行列と2次列ベクトルの積は計算できませんから、操作する座標に相当する列ベクトルも3次列ベクトルにしなければなりません。そこで、アフィン変換を行う場合には3行目に 1 を入れることにします。こうすることでうまく演算を定義でき、しかも結果に一切悪影響を与えないようにすることができます。つまり、2次元の図形に対するアフィン変換の式は次のようになります。もう一度言いますが、アフィン行列3行目の 0 0 1 の並びと列ベクトル3行目の 1 という値は何の意味も持ちません。単にうまく計算ができるように存在しているだけです。

アフィン変換
$\ \pmatrix{a & b & c\\ d & e & f\\ 0 & 0 & 1}\pmatrix{x\\ y\\ 1} = \pmatrix{x'\\ y'\\ 1}\ $

それでは、まずはここまでに出てきた一次変換をアフィン行列で表してみましょう。

定理 (拡大変換をあらわすアフィン変換)
アフィン変換$\ \pmatrix{a & 0 & 0\\ 0 & b & 0\\ 0 & 0 & 1}$は、$\ x\ $軸に$\ a\ $倍、$\ y\ $軸に$\ b\ $倍拡大する変換をあらわす。

1つ目は拡大変換です。前々項ではX, Yとも等倍率のものを示しましたが、それぞれの方向で倍率を変えても形はほぼ同じです。倍率にマイナスを指定すると左右あるいは上下が逆になりますから、座標軸に関する対称移動は、拡大変換の特殊な例ということができます。もちろん$\ a=b=1\ $ならば恒等変換です。
次は回転移動です。

定理 (回転移動をあらわすアフィン変換)
アフィン変換$\ \pmatrix{\cos\phi & -\sin\phi & 0\\ \sin\phi & \cos\phi & 0\\ 0 & 0 & 1}\ $は、座標平面の原点を中心とし、反時計回りに$\ \phi\ $回転する回転移動をあらわす。

任意の一次変換を表すアフィン変換も覚えておきましょう。この2つの例からお気づきの通り、単に左上にそのまま2x2の行列を入れるだけです。

定理 (一次変換をあらわすアフィン変換)
アフィン変換$\ \pmatrix{a & b & 0\\ c & d & 0\\ 0 & 0 & 1}\ $は、一次変換$\ \pmatrix{a & b\\ c & d}\ $と等価な変換をあらわす。

それでは平行移動をあらわす変換を求めましょう。平行移動するということは、各座標軸方向に一定距離動くということですから、次のような結果を得られれば良いことになります。(ギリシア文字$\ \Delta\ $はしばしば「微小変分」とか「差分」とか「変化」といった意味合いで使われます)

$\ \pmatrix{a & b & c\\ d & e & f\\ 0 & 0 & 1}\pmatrix{x\\ y\\ 1} = \pmatrix{x + \Delta x\\ y + \Delta y\\ 1}\ $

左辺を計算してみましょう。2x2行列の計算しかほとんど扱っていませんが、積の計算は2x2の時と同じように機械的にやるだけです。

$\ \pmatrix{a & b & c\\ d & e & f\\ 0 & 0 & 1}\pmatrix{x\\ y\\ 1} = \pmatrix{ax + by + c\\ dx + ey +f\\ 1}\ $

最後に得られるべき結果と比較して各係数の値を決定しましょう。

$\ \pmatrix{ax + by + c\\ dx + ey +f\\ 1} = \pmatrix{x + \Delta x\\ y + \Delta y\\ 1}\ $

となるはずですから、平行移動をあらわす行列は次のようになります。

定理 (平行移動をあらわすアフィン変換)
アフィン変換$\ \pmatrix{1 & 0 & \Delta x\\ 0 & 1 & \Delta y\\ 0 & 0 & 1}\ $は、$\ x\ $軸方向に$\ \Delta x\ $, $\ y\ $軸方向に$\ \Delta y\ $動かす平行移動をあらわす。

はじめて3列目に0以外の値が出てきましたね。そしてこの3列目に入っている値こそが、図形をどれだけ移動させるかという距離になっていることが分かります。
そして、列ベクトルの3行目が1になっている理由もこれでわかったと思います。1以外の値にしてしまうと正しく平行移動ができないのです。
また、線型変換の時と全く同じようにして、アフィン変換に対しても合成変換を考えることができます。また、アフィン行列が正則である限りは逆行列が定義できますから、アフィン行列の逆行列を求めることで逆変換を求めることができます。アフィン行列の逆行列は次のようになります。

定理 (アフィン行列の行列式および逆行列)
アフィン行列$\ \pmatrix{a & b & c\\ d & e & f\\ 0 & 0 & 1}$の行列式$\ \Delta\ $は、$\ \Delta = ae - bd\ $であらわされる。
アフィン行列の逆行列は$\ \Delta \ne 0\ $の時に定義されて、$\ \cfrac{1}{\Delta}\pmatrix{e & -b & bf - ce\\ -d & a & cd - fa\\ 0 & 0 & \Delta}$とあらわされる。

式を見ればわかる通り、アフィン行列の行列式は、線型変換をあらわす部分の2x2行列の行列式と同じになります。また、逆行列も、線型変換のあった部分は線型変換の逆行列となっていることが分かります。平行移動に関係する部分は少しわかりにくいですが、これは逆方向への平行移動、すなわち、移動先の座標から元の位置に戻ってくるような平行移動をあらわしています。3行目はやはり 0 0 1 のままです。
また、線型変換の行列式とアフィン変換の行列式が一致することから、アフィン変換が逆行列を持つ条件は、線型変換部分の操作が逆変換を持つことと言えます。
ひとつ応用的な例を見てみましょう。原点を中心とする回転移動は先ほど説明しましたが、任意の点を中心にした回転移動はどのようにあらわせるでしょうか。アフィン行列を使えば簡潔に書くことができます。

例題
座標平面上の任意の点$\ (a, b)\ $を中心とし、反時計回りに$\ \phi\ $回転する変換をあらわす行列を求めよ。

求める行列のあらわす変換は、$\ (-a, -b)\ $平行移動し、$\ \phi\ $回転移動し、そして$\ (a, b)\ $平行移動させる合成変換と同じである。よって、求める行列は、
\[
\pmatrix{ 1 & 0 & a\\ 0 & 1 & b\\ 0 & 0 & 1 }
\pmatrix{ \cos \phi & -\sin\phi & 0 \\ \sin\phi & \cos\phi & 0\\ 0 & 0 & 1}
\pmatrix{ 1 & 0 & -a\\ 0 & 1 & -b\\ 0 & 0 & 1}=
\pmatrix{ \cos\phi & -\sin\phi & -a\cos\phi +b\sin\phi +a\\ \sin\phi & \cos\phi & -a\sin\phi -b\cos\phi +b \\ 0 & 0 & 1}
\]

以上が行列を用いて図形に変形を加える操作の基本となります。図形に変化を加える操作は、複素数を用いて考える(ガウス平面)こともできますが、ここでは扱わないことにします。簡単にさわりだけを説明すると、座標平面のy軸を純虚数に対応させて複素数$\ z=x+iy\ $を座標$\ (x, y)\ $に対応させます。この考え方を用いれば、実数倍は拡大縮小、虚数を掛け合わせるということは回転や反転などを含む一次変換を意味することになります。