2次元平面の回転行列

rotation-matrix-2d.png

回転行列がcos,sinの組み合わせな理由

なぜ回転行列は

(1)
\begin{align} \left[\begin{matrix} cos\theta&-sin\theta\\ sin\theta&cos\theta\\ \end{matrix}\right] \end{align}
という形をしているのか?
それは三角関数の公式から導き出される。
2drotate.png(2)
\begin{align} P_x=||P||\cos\phi\\ P_y=||P||\sin\phi\\ P'_x=||P||\cos(\theta+\phi)\\ P'_y=||P||\sin(\theta+\phi) \end{align}

である。$P'$の方に三角関数の公式を適用させると、

(3)
\begin{align} \sin(\theta+\phi)=\sin\theta\cos\phi+\cos\theta\sin\phi\\ \cos(\theta+\phi)=\cos\theta\cos\phi+\sin\theta\sin\phi \end{align}

最終的に$p'_x$$p'_y$は次のようになる

(4)
\begin{align} P'_x=p_x\cos\theta-p_y\sin\theta\\ P'_y=p_x\sin\theta+p_y\cos\theta \end{align}

となる。
これは行列を使って表すと

(5)
\begin{align} \left[ \begin{matrix} p'_x\\ p'_x \end{matrix} \right] = \left[ \begin{matrix} \cos\theta&-\sin\theta\\ \sin\theta&\cos\theta\\ \end{matrix} \right] \left[ \begin{matrix} p_x\\ p_y\end{matrix} \right] \end{align}

簡単にコード書くとこんなかんじ

offset_x=offset_x*(float)Math.cos(rad)-offset_y*(float)Math.sin(rad);
offset_y=offset_x*(float)Math.sin(rad)+offset_y*(float)Math.cos(rad);

[[/code]]

サポートサイト Wikidot.com