やさしい行列 #2

公開 更新

コンピュータグラフィックス視点の行列入門プリントの2冊目です。今回は三角関数と回転行列を扱います。

回転する世界

60度回転させた世界

前回は行列の図を観察しながら仕組みを勉強しました。今回は回転行列について解説していきます。

30度回転させた世界

行列は空間のひとマスを軸のベクトルで定義しました。なので θ\theta 回転させた世界も軸のベクトルがわかれば行列をつくることができます。

回転の計算には三角関数が必要になってきます。すこし遠回りになりますが三角関数の解説をしながら回転行列へとつなげていきたいと思います。

水平方向の比率(コサイン)

たとえばこんな図形があったとして、7m の斜辺と 30 度という角度が分かっているときに、どうしても底辺が知りたいとします・・・。どうすればいいでしょうか?

昔の人は考えました。「角度ごとに比率を測って表を作ってみよう」

比率は b ÷ a なので、a が 1 のときはそのまま b の長さになります。

このような長い表をつくってどんな角度にも対応できるようにしました。

関数とは・・

30 度のときの b の a に対する比率は表で調べると 0.8660 なので

7m×0.866=6.062m7\text{m} \times 0.866 = 6.062\text{m}

このようにして表を参照することで底辺を計算することが出来るようになりました。

これを計算式にするとこうなります。

7×cos30=6.0627 \times \cos 30^\circ = 6.062
底辺は 7m × cos30°。

この cos という記号は関数なので中の数字はあまり意識する必要はありません。関数というのは数字を入力したら定められた処理をして答えを返す機能だと思ってください。

コサインの値は人が暗記することも計算することも難しいので通常は表を参照したり、コンピュータを使って値を取得します。人は cos という関数が斜辺に対する底辺の比率ということだけ知っておく必要があります。

垂直方向の比率(サイン)

30 度の角度で毎秒 5m の速さで飛ぶ鳥は毎秒何 m で上昇していくでしょうか。

垂直方向も水平方向と同じように sin 関数を使うことで求めることができます。sin 関数は斜辺に対する垂直方向の比率です。

比率は c ÷ a なので、a が 1 のときはそのまま c の長さになります。

sin 関数も同じように表があり、それを参照することで求まります。30 度のときの sin は 0.5 なので高度は次のように計算できます。

5m×sin30=5m×0.5=2.5m5\text{m} \times \sin 30^\circ = 5\text{m} \times 0.5 = 2.5\text{m}

成分を分解してベクトルへ

ここまで三角関数の説明してきましたが、ポイントは三角関数を使うことで斜辺の水平方向と垂直方向の成分が分かるということです。つまり x 方向と y 方向が分かればベクトルに変換することが出来ます。

斜辺 5、角度 30 度のベクトルは (5×cos30°, 5×sin30°) = (4.33, 2.5)。

x 成分は cos、y 成分は sin で求めることが出来ると覚えておきましょう。

長さが 1 で角度が θ\theta の斜辺をベクトルにすると (cosθ, sinθ)(\cos\theta,\ \sin\theta) になります。それでは次の頁で単位円の成分を分解していきます。

軸を θ 回転させる

単位円です。半径の長さは 1 です。(1,0)(1, 0) の座標を角度 θ\theta で回転させたら (cosθ, sinθ)(\cos\theta,\ \sin\theta) へ移動することになります。

(0,1)(0, 1) の座標を角度 θ\theta で回転させたらどうなるでしょうか。これは上の図を反時計回りに 90 度傾ければわかりやすいと思います。移動後の座標は (sinθ, cosθ)(-\sin\theta,\ \cos\theta) になります。

回転行列のしくみ

前頁を座標変換をまとめます。直交している x 軸と y 軸を θ\theta 回転させると、x 軸のベクトルは (cosθ, sinθ)(\cos\theta,\ \sin\theta) になり、y 軸は (sinθ, cosθ)(-\sin\theta,\ \cos\theta) になります。

上の行が x 軸のベクトル、下の行が y 軸のベクトル。θ 回転すると右の形になる。

行列は軸のベクトルで表すことができたので、θ\theta 回転した後の世界はこのようになります。これが回転行列となります。

[cosθsinθsinθcosθ]\begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix}

回転後の世界

30 度回転させた世界。(3, 1) はどこへ移動するか。

それでは 30 度回転させた行列を例に座標変換をしてみましょう。座標 (3,1)(3, 1) にこの行列を掛けるとどこに移動するのでしょうか。

[cos30sin30sin30cos30]\begin{bmatrix} \cos 30^\circ & \sin 30^\circ \\ -\sin 30^\circ & \cos 30^\circ \end{bmatrix} [31]×[cos30sin30sin30cos30]=[31]×[0.8660.50.50.866]\begin{bmatrix} 3 & 1 \end{bmatrix} \times \begin{bmatrix} \cos 30^\circ & \sin 30^\circ \\ -\sin 30^\circ & \cos 30^\circ \end{bmatrix} = \begin{bmatrix} 3 & 1 \end{bmatrix} \times \begin{bmatrix} 0.866 & 0.5 \\ -0.5 & 0.866 \end{bmatrix} =[3×0.866+1×(0.5)3×0.5+1×0.866]=[2.0982.366]= \begin{bmatrix} 3 \times 0.866 + 1 \times (-0.5) & 3 \times 0.5 + 1 \times 0.866 \end{bmatrix} = \begin{bmatrix} 2.098 & 2.366 \end{bmatrix}

計算の結果、(2.098, 2.366)(2.098,\ 2.366) に移動しました。

回転行列のしくみはご理解いただけたでしょうか?それではまた次回に続きます・・・

← やさしい行列 #1「行列のしくみ」へ戻る やさしい行列 #3「拡大縮小の行列と行列の積」へ続く →

付録:もとのプリント

上の記事は、配布したプリントを画面で読める形に組み直したものです。誌面そのものは以下のとおり(押すと大きくなります)。

← 記事一覧へ