Programming For Game Develop

HAL東京ゲーム制作学科の学生がプログラミング、数学、学校生活について発信します。

アフィン変換による回転式を導く

 f:id:vector10:20180401090358g:plain

行列による回転式を導く方法を説明したいと思います。

話を進める上での前提条件

・右手座標系

・行列×列ベクトルで計算

f:id:vector10:20180401100045p:plain

前提条件下での回転式は下記となります。

f:id:vector10:20180401083643p:plain

なぜこの式がどうのようにして立てられるのか分かりやすく解説したいと思います。

式を導く鍵は「正弦・余弦の加法定理」

まず、あるオブジェクトがY軸回りに反時計回りに回転しているところをイメージして下さい。

それはちょうどこの記事の一番上にある緑の長方形オブジェクトのような回転をします。

このときオブジェクト自体の角度は回転に合わせて変化します。

 ( 0°<初期状態>  → 10° → 20° → 30° … 360°<一回転> ... 370° → 380° ... 720°<2回転>)

これに合わせてオブジェクト自体の座標(正確にはピクセル毎の座標)が変化し、画面上で回転しているように見えるというわけです。

オブジェクトはたくさんのピクセル(小さな色付きの点)で構成されています。

ということは、全てのピクセル座標を回転に合わせて変化させればオブジェクト自体が回転したように見えることになります。

ここで、数学に置き換えるため、ピクセルを点と考えることにします。

ある点がある角度だけ回った場合の点の座標を求めることができれば、ピクセルの回転が行えることになります。さらにそれを全ピクセルに適用することでオブジェクト自体の回転が達成されるのです!

 ここで登場するのが「正弦・余弦の加法定理」です。( 数学が苦手な方はうわっと思うかも知れませんが、簡単なので安心して下さい)

正弦の加法定理 : sin( θ+α ) = sin θ con α + cos θ sin α 

正弦(sin)の加法定理とは、あるY座標の点が、ある2つの任意の角度を足し合わせた角度分だけ回転した場合のY座標を計算する式です。(※単位円で考えると分かり易いのですが、sinはY座標を表します。)

余弦(cos)の加法定理はその逆でX座標についての計算式となります。

余弦の加法定理 : cos( θ + α ) = cos θ cos α - sin θ sin α

つまり、この式のθを回転角度とし、αを回転前の角度とすることで、回転後の角度の座標( x, y )を求めることができるのです。

この定理の式になるように行列を作成するだけで回転行列が完成します。