アフィン変換
これまでに、さまざまな図形の変換を学んできました。
これらの変換は、「何を保ったまま図形を変えるか」という観点で分類され、アフィン変換・射影変換というより大きな枠組みの中に位置づけられます。
変換の分類と階層
これまで扱ってきた変換は、それぞれ図形の見た目を変えますが、変えずに残す性質には違いがあります。たとえば、回転は図形の形も大きさもそのまま保ちますが、拡大・縮小は大きさを変え、スキューは図形の辺どうしが交わる角度(たとえば長方形の直角)まで変えてしまいます。
このように、変換を「何を保存するか」という基準で眺めると、保つ性質が多いものから少ないものへと並ぶ階層が見えてきます。
保つ性質が多い変換ほど、図形に許される変形は小さくなります。逆に、保つ性質が少ない変換ほど、より自由に図形を変形できます。この階層を整理したものが次の分類です。
- ユークリッド変換:平行移動・回転を組み合わせた変換。長さと角度を保つ
- 相似変換:ユークリッド変換に等倍スケーリングを加えた変換。大きさは変わるが、角度と長さの比、すなわち図形の形は保たれる
- アフィン変換:線形変換(非等倍スケールやスキューを含む)と平行移動を組み合わせた変換。直線性と平行性を保つ
- 射影変換:同次座標行列の最下行が一般の値をとる変換。保たれるのは直線性だけ
これらは独立した分類ではなく、保つ性質が多いものが少ないものに含まれる、入れ子の関係になっています。ユークリッド変換は相似変換の一種であり、相似変換はアフィン変換の一種、というように、内側ほど制約の強い変換が外側のより広い変換に含まれます。
これまでに学んだ平行移動・回転・拡大/縮小・鏡映・スキューは、いずれもこの階層の中で、アフィン変換までの範囲に収まります。
最も制約の強いユークリッド変換から順に、内側から外側へと詳しく見ていきましょう。
ユークリッド変換
図形を変形させることなく、長さと角度を保ったまま動かす変換をユークリッド変換といいます。
ユークリッド変換は、平行移動・回転を組み合わせた変換です。
2次元のユークリッド変換は、回転を担う2行2列の部分と、平行移動量をまとめた3行3列の行列で表せます。
ユークリッド変換を行う式
ユークリッド変換は回転と平行移動を組み合わせたものなので、ユークリッド変換を表す行列は、回転を表す行列と平行移動を表す行列の積で作ることができます。
回転を表す行列を、平行移動を表す行列をとし、これらの積を計算した結果は、ユークリッド変換の行列に一致します。
鏡映から平行移動と回転が生まれる
実は、鏡映も「長さと角度を保ったまま図形を動かす変換」なので、ユークリッド変換の仲間です。
そして、鏡映を繰り返すことで、平行移動と回転を作り出すことができます。
平行移動:平行な2本の直線による鏡映
平行な2本の直線に対して順番に鏡映すると、結果は平行移動になります。
たとえば、平行な2本の直線 と を考え、次の順番で鏡映してみます。
1. x = 0 で鏡映して、(x, y) -> (-x, y)
2. x = d で鏡映して、(-x, y) -> (2d - (-x), y) = (2d + x, y)ここで、2回目の鏡映で2dが現れる理由を見ておきましょう。鏡映は、点を鏡の反対側へ、鏡までと同じ距離だけ移す変換です。x座標がxの点なら、鏡となる直線x = dまでの距離はd - xなので、移った先x'は、そこから鏡を越えてさらに同じ距離だけ進んだ位置になります。
鏡まで進む分と、鏡を越えて進む分とで、距離を2回分足すことになるため、2dが現れるわけです。
そして、1回目の鏡映で、すでにxは-xに変化しているので、それを代入して、最終的なx座標は2d + xとなります。
つまり、この2回の鏡映で、2dだけ右へ平行移動したことになります。
このように、平行な直線で2回反転すると、向きは元に戻り、位置だけがずれるため、平行移動になります。このとき、平行な2本の直線の間隔の2倍が移動量になるという関係が成り立ちます。
回転:交わる2本の直線による鏡映
1点で交わる2本の直線に対して順番に鏡映すると、結果は回転になります。
この2本の直線のなす角をとすると、順番に鏡映した結果はだけの回転になります。
たとえば、45度で交わる直線なら、鏡映の合成結果は90度回転になります。
このように、1点で交わる直線で2回反転すると、向きは元に戻り、基準となる直線が変わるため、2直線の交点を中心とした回転になります。
このとき、2本の直線のなす角の2倍が回転角になるという関係が成り立ちます。
鏡映は1回行うと図形の向きを反転させますが、続けて2回行うと向きが元に戻ります。平行移動も回転も向きを保つ変換ですが、いずれも鏡映2回の組み合わせで表せます。
このように、ユークリッド変換は、鏡映というひとつの操作から組み立てられる変換と捉えることもできます。
ユークリッド変換で保たれる性質
平行移動・回転・鏡映は、いずれも図形上の任意の2点間の距離を変えません。長さが保たれるこの性質を等長性といい、ユークリッド変換に共通する土台になっています。
ユークリッド変換では、長さと角度がともに保たれるため、変換の前後で図形は合同になります。
合同とは、2つの図形の対応する辺の長さと角の大きさがすべて等しく、図形を完全に重ね合わせられる関係です。合同な図形は、回転・平行移動・裏返し(鏡映)を組み合わせることで、ぴったりと重ねることができます。
剛体変換
ユークリッド変換は、図形(物体)を変形させず、硬い剛体のまま動かす変換であることから、物理・ロボティクス・工学などの分野では剛体変換と呼ばれます。
CGの分野では、ユークリッド変換(剛体変換)はオブジェクトを破綻なくシーンに配置するときや、物体を変形させずに動かす剛体アニメーションで使われます。キャラクターの手足や乗り物のように、形を保ったまま位置と向きだけを変えたい対象に適した変換です。
相似変換
ユークリッド変換に等倍スケーリングを加えた変換が相似変換です。
等倍スケーリングとは、縦と横を同じ倍率sで拡大・縮小する操作で、図形の大きさは変えても縦横の比は崩しません。
2次元の相似変換は、左上の2行2列が、回転行列に倍率sを掛けた形になっています。
相似変換を行う式
相似変換は等倍スケーリングとユークリッド変換を組み合わせたものなので、相似変換を表す行列は、等倍スケーリング(同じ倍率による拡大・縮小)を表す行列とユークリッド変換を表す行列の積で作ることができます。
等倍スケーリングを表す行列を、ユークリッド変換の行列をとし、これらの積を計算した結果は、相似変換の行列に一致します。
倍率sを1にすれば、ユークリッド変換に戻ります。
このことからも、相似変換がユークリッド変換を拡張したものだとわかります。
相似変換で保たれる性質
相似変換は、角度と長さの比を保ちます。
大きさそのものは倍率sによって変わりますが、すべての辺が同じ割合で伸び縮みするため、辺どうしの長さの比は変わりません。角度もそのまま保たれます。
相似変換では、長さの比と角度、すなわち形が保たれるため、変換の前後で図形は相似になります。
相似とは、形を歪めずに拡大・縮小すると、図形を完全に重ね合わせられる関係です。
ここで注意したいのは、相似変換に含まれるのは縦横を同じ倍率で変える等倍スケーリングだけであることです。縦横で倍率の異なる非等倍スケーリングや、図形を斜めに歪めるスキューは、相似変換には含まれません。これらは形を変えてしまう操作であり、次に見るアフィン変換で初めて登場します。
アフィン変換
非等倍スケーリングやスキューも含む線形変換と平行移動を組み合わせた変換がアフィン変換です。
拡大・縮小や回転など、行列の掛け算で表せる変換は線形変換 と呼ばれます。これらに平行移動を加え、同次座標を使ってひとつの行列にまとめたものがアフィン変換です。
2次元のアフィン変換は、3行3列の行列で次のように表せます。
ここで注目したいのは、行列の最下行が(0 0 1)に固定されている点です。
これまで学んだ平行移動・拡大/縮小・回転・鏡映・スキューの行列を思い出すと、どれも最下行は(0 0 1)でした。つまり、アフィン変換は「同次座標行列の最下行が(0 0 1)に固定された変換」と特徴づけられ、これまで学んだ変換はすべてアフィン変換の仲間だったといえます。
3次元のアフィン変換も同じ考え方で、4行4列の行列の最下行が(0 0 0 1)に固定されたものになります。
最下行が(0 0 1)であることは、変換後も同次座標のwが1のまま保たれることを意味します。
アフィン変換で保たれる性質
アフィン変換が保つのは、直線性と平行性の2つです。
- 直線性:変換の前後で直線が直線のまま写るという性質(曲がったり折れたりしない)
- 平行性:平行な
2直線が変換後も平行なまま保たれる性質(平行四辺形は必ず平行四辺形に写る)
一方で、長さ・角度・面積は一般には保たれません。
非等倍スケーリングは縦横の比を変え、スキューは直角を斜めに崩します。これらの操作によって、辺の長さや角の大きさ、図形の面積は変化しうるのです。
この階層のいちばん外側に残っているのが、最下行の(0 0 1)という固定を外した射影変換 です。