Pynote

Python、機械学習、画像処理について

数学 - オイラー角について

各軸周りの回転行列

右手系の標準基底 \boldsymbol{e}_1 = (1, 0, 0)^T, \boldsymbol{e}_2 = (0, 1, 0)^T, \boldsymbol{e}_3 = (0, 0, 1)^T をとる。

\boldsymbol{e}_1 周りの回転

\boldsymbol{e}_1 周りに角度 \theta だけ回転して得られる基底を \boldsymbol{e}'_1, \boldsymbol{e}'_2, \boldsymbol{e}'_3 とする。

このとき、元の基底 \boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3 と変換後の基底 \boldsymbol{e}'_1, \boldsymbol{e}'_2, \boldsymbol{e}'_3 の関係は次のようになる。

回転でノルムが変化しないので、\|\boldsymbol{e}'_i\| = \|\boldsymbol{e}_i\| =1, (i = 1, 2, 3) に注意すると、

 \displaystyle
\begin{align}
\boldsymbol{e}'_1 &= \boldsymbol{e}_1 \\
\boldsymbol{e}'_2 &= \cos\theta \boldsymbol{e}_2 + \sin\theta \boldsymbol{e}_3 \\
\boldsymbol{e}'_3 &= -\sin\theta \boldsymbol{e}_2 + \cos\theta \boldsymbol{e}_3
\end{align}

よって、基底変換行列は

 \displaystyle
(\boldsymbol{e}'_1, \boldsymbol{e}'_2, \boldsymbol{e}'_3)
= (\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3)
\begin{pmatrix}
1 & 0 & 0 \\
0 & \cos\theta & -\sin\theta \\
0 & \sin\theta & \cos\theta \\
\end{pmatrix}


\boldsymbol{e}_2 周りの回転

\boldsymbol{e}_2 周りに角度 \theta だけ回転して得られる基底を \boldsymbol{e}'_1, \boldsymbol{e}'_2, \boldsymbol{e}'_3 とする。

このとき、元の基底 \boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3 と変換後の基底 \boldsymbol{e}'_1, \boldsymbol{e}'_2, \boldsymbol{e}'_3 の関係は次のようになる。

 \displaystyle
\begin{align}
\boldsymbol{e}'_1 &= \cos\theta \boldsymbol{e}_1 - \sin\theta \boldsymbol{e}_3\\
\boldsymbol{e}'_2 &= \boldsymbol{e}_3 \\
\boldsymbol{e}'_3 &= \sin\theta \boldsymbol{e}_1 + \cos\theta \boldsymbol{e}_3
\end{align}

よって、基底変換行列は

 \displaystyle
(\boldsymbol{e}'_1, \boldsymbol{e}'_2, \boldsymbol{e}'_3)
= (\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3)
\begin{pmatrix}
\cos\theta & 0 & \sin\theta \\
0 & 1 & 0 \\
 -\sin\theta & 0 & \cos\theta \\
\end{pmatrix}


\boldsymbol{e}_3 周りの回転

\boldsymbol{e}_3 周りに角度 \theta だけ回転して得られる基底を \boldsymbol{e}'_1, \boldsymbol{e}'_2, \boldsymbol{e}'_3 とする。

このとき、元の基底 \boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3 と変換後の基底 \boldsymbol{e}'_1, \boldsymbol{e}'_2, \boldsymbol{e}'_3 の関係は次のようになる。

 \displaystyle
\begin{align}
\boldsymbol{e}'_1 &= \cos\theta \boldsymbol{e}_1 + \sin\theta \boldsymbol{e}_2\\
\boldsymbol{e}'_2 &= -\sin\theta \boldsymbol{e}_1 + \cos\theta \boldsymbol{e}_2 \\
\boldsymbol{e}'_3 &= \boldsymbol{e}_3
\end{align}

よって、基底変換行列は

 \displaystyle
(\boldsymbol{e}'_1, \boldsymbol{e}'_2, \boldsymbol{e}'_3)
= (\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3)
\begin{pmatrix}
\cos\theta & -\sin\theta & 0 \\
\sin\theta & \cos\theta & 0 \\
0 & 0 & 1 \\
\end{pmatrix}


オイラー

定理
3次元空間上の任意の回転は、各軸回りの3つの回転の組み合わせで実現できる。

3つの回転に対応する回転角度をオイラー角 (Euler angles) といい、\alpha, \beta, \gamma または \phi, \theta, \psi で表される。

回転する順番

回転する軸の順序によって、結果は異なることに注意する。

例えば、回転の順番が z, y, x で対応するオイラー角が \alpha, \beta, \gamma の場合、回転は以下の順序で行う。

1. z 軸回りに \gamma だけ回転し、基底が z', y', x' になる。
2. y' 軸回りに \beta だけ回転し、基底が z'', y'', x'' になる。
3. x'' 軸回りに \alpha だけ回転し、基底が z''', y''', x''' になる。

  • 2つの基底を軸に回転する場合 (Proper Euler angles)
    • x, y, x
    • x, z, x
    • y, x, y
    • y, z, y
    • z, x, z
    • z, y, z
  • 3つの基底を軸に回転する場合 (Tait-Bryan angles/roll, pitch, yaw)
    • x, y, z
    • x, z, y
    • y, x, z
    • y, z, x
    • z, x, y
    • z, y, x
オイラー角により構成される回転行列

x 軸周りに \theta だけ回転する行列を R_x(\theta)y 軸周りに \theta だけ回転する行列を R_y(\theta)z 軸周りに \theta だけ回転する行列を R_z(\theta) とする。

 \displaystyle
R_x(\gamma) R_y(\beta) R_x(\alpha) = \\
\begin{pmatrix}
cos\beta & sin\beta sin\gamma & cos\gamma sin\beta \\
sin\alpha sin\beta & cos\alpha cos\gamma - cos\beta sin\alpha sin\gamma & -cos\beta cos\gamma sin\alpha - cos\alpha sin\gamma \\
 -cos\alpha sin\beta & cos\gamma sin\alpha + cos\alpha cos\beta sin\gamma & cos\alpha cos\beta cos\gamma - sin\alpha sin\gamma \\
\end{pmatrix}

 \displaystyle
R_x(\gamma) R_z(\beta) R_x(\alpha) = \\
\begin{pmatrix}
cos\beta & -cos\alpha sin\beta & sin\alpha sin\beta \\
cos\gamma sin\beta & cos\alpha cos\beta cos\gamma - sin\alpha sin\gamma & -cos\beta cos\gamma sin\alpha - cos\alpha sin\gamma \\
sin\beta sin\gamma & cos\gamma sin\alpha + cos\alpha cos\beta sin\gamma & cos\alpha cos\gamma - cos\beta sin\alpha sin\gamma \\
\end{pmatrix}

 \displaystyle
R_y(\gamma) R_x(\beta) R_y(\alpha) = \\
\begin{pmatrix}
cos\alpha cos\gamma - cos\beta sin\alpha sin\gamma & sin\beta sin\gamma & cos\gamma sin\alpha + cos\alpha cos\beta sin\gamma \\
sin\alpha sin\beta & cos\beta & -cos\alpha sin\beta \\
 -cos\beta cos\gamma sin\alpha - cos\alpha sin\gamma & cos\gamma sin\beta & cos\alpha cos\beta cos\gamma - sin\alpha sin\gamma \\
\end{pmatrix}

 \displaystyle
R_y(\gamma) R_z(\beta) R_y(\alpha) = \\
\begin{pmatrix}
cos\alpha cos\beta cos\gamma - sin\alpha sin\gamma & -cos\gamma sin\beta & cos\beta cos\gamma sin\alpha + cos\alpha sin\gamma \\
cos\alpha sin\beta & cos\beta & sin\alpha sin\beta \\
 -cos\gamma sin\alpha - cos\alpha cos\beta sin\gamma & sin\beta sin\gamma & cos\alpha cos\gamma - cos\beta sin\alpha sin\gamma \\
\end{pmatrix}

 \displaystyle
R_z(\gamma) R_x(\beta) R_z(\alpha) = \\
\begin{pmatrix}
cos\alpha cos\gamma - cos\beta sin\alpha sin\gamma & -cos\gamma sin\alpha - cos\alpha cos\beta sin\gamma & sin\beta sin\gamma \\
cos\beta cos\gamma sin\alpha + cos\alpha sin\gamma & cos\alpha cos\beta cos\gamma - sin\alpha sin\gamma & -cos\gamma sin\beta \\
sin\alpha sin\beta & cos\alpha sin\beta & cos\beta \\
\end{pmatrix}

 \displaystyle
R_z(\gamma) R_y(\beta) R_z(\alpha) = \\
\begin{pmatrix}
cos\alpha cos\beta cos\gamma - sin\alpha sin\gamma & -cos\beta cos\gamma sin\alpha - cos\alpha sin\gamma & cos\gamma sin\beta \\
cos\gamma sin\alpha + cos\alpha cos\beta sin\gamma & cos\alpha cos\gamma - cos\beta sin\alpha sin\gamma & sin\beta sin\gamma \\
 -cos\alpha sin\beta & sin\alpha sin\beta & cos\beta \\
\end{pmatrix}

 \displaystyle
R_x(\gamma) R_y(\beta) R_z(\alpha) = \\
\begin{pmatrix}
cos\alpha cos\beta & -cos\beta sin\alpha & sin\beta \\
cos\gamma sin\alpha + cos\alpha sin\beta sin\gamma & cos\alpha cos\gamma - sin\alpha sin\beta sin\gamma & -cos\beta sin\gamma \\
sin\alpha sin\gamma - cos\alpha cos\gamma sin\beta & cos\gamma sin\alpha sin\beta + cos\alpha sin\gamma & cos\beta cos\gamma \\
\end{pmatrix}

 \displaystyle
R_x(\gamma) R_z(\beta) R_y(\alpha) = \\
\begin{pmatrix}
cos\alpha cos\beta & -sin\beta & cos\beta sin\alpha \\
cos\alpha cos\gamma sin\beta + sin\alpha sin\gamma & cos\beta cos\gamma & cos\gamma sin\alpha sin\beta - cos\alpha sin\gamma \\
cos\alpha sin\beta sin\gamma - cos\gamma sin\alpha & cos\beta sin\gamma & cos\alpha cos\gamma + sin\alpha sin\beta sin\gamma \\
\end{pmatrix}

 \displaystyle
R_y(\gamma) R_x(\beta) R_z(\alpha) = \\
\begin{pmatrix}
cos\alpha cos\gamma + sin\alpha sin\beta sin\gamma & cos\alpha sin\beta sin\gamma - cos\gamma sin\alpha & cos\beta sin\gamma \\
cos\beta sin\alpha & cos\alpha cos\beta & -sin\beta \\
cos\gamma sin\alpha sin\beta - cos\alpha sin\gamma & cos\alpha cos\gamma sin\beta + sin\alpha sin\gamma & cos\beta cos\gamma \\
\end{pmatrix}

 \displaystyle
R_y(\gamma) R_z(\beta) R_x(\alpha) = \\
\begin{pmatrix}
cos\alpha cos\gamma & sin\beta sin\gamma - cos\beta cos\gamma sin\alpha & cos\gamma sin\alpha sin\beta + cos\beta sin\gamma \\
sin\alpha & cos\alpha cos\beta & -cos\alpha sin\beta \\
 -cos\alpha sin\gamma & cos\gamma sin\beta + cos\beta sin\alpha sin\gamma & cos\beta cos\gamma - sin\alpha sin\beta sin\gamma \\
\end{pmatrix}

 \displaystyle
R_z(\gamma) R_y(\beta) R_x(\alpha) = \\
\begin{pmatrix}
cos\alpha cos\beta & -cos\beta sin\alpha & sin\beta \\
cos\gamma sin\alpha + cos\alpha sin\beta sin\gamma & cos\alpha cos\gamma - sin\alpha sin\beta sin\gamma & -cos\beta sin\gamma \\
sin\alpha sin\gamma - cos\alpha cos\gamma sin\beta & cos\gamma sin\alpha sin\beta + cos\alpha sin\gamma & cos\beta cos\gamma \\
\end{pmatrix}

 \displaystyle
R_z(\gamma) R_y(\beta) R_x(\alpha) = \\
\begin{pmatrix}
cos\beta cos\gamma & cos\gamma sin\alpha sin\beta - cos\alpha sin\gamma & cos\alpha cos\gamma sin\beta + sin\alpha sin\gamma \\
cos\beta sin\gamma & cos\alpha cos\gamma + sin\alpha sin\beta sin\gamma & cos\alpha sin\beta sin\gamma - cos\gamma sin\alpha \\
 -sin\beta & cos\beta sin\alpha & cos\alpha cos\beta \\
\end{pmatrix}

roll, pitch, yaw

回転の順序を x, y, z の代わりに roll, pitch, yaw で表す場合がある。
この場合、x 軸回りの回転を roll、y 軸回りの回転を pitch、z 軸回りの回転を yaw という。

証明

3次元空間の回転は 3 \times 3 の直交行列で表せるので、任意の 3 \times 3 の直交行列に対して、オイラー\alpha, \beta, \gamma を決められることを示せばよい。