【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

極座標と回転行列

極座標の考え方で任意の軸周りの回転行列を生成して、その構造を調べます。

目次

概要

任意の軸回りの回転は、回転軸を $z$ 軸方向に変換することで、$x-y$ 平面上の回転として表現できます。

その方法でロドリゲスの回転公式を導出して、行列指数関数によって構造を調べます。

なるべく具体的な計算で確認することを意図しています。

回転行列

3 次元で座標軸 $x,y,z$ 周りの回転を行列で表します。

\begin{aligned} R_x(θ):=&\begin{pmatrix} 1 & 0 & 0 \\ 0 & \cosθ & -\sinθ \\ 0 & \sinθ & \;\;\;\cosθ \end{pmatrix} \\ R_y(θ):=&\begin{pmatrix} \;\;\;\cosθ & 0 & \sinθ \\ 0 & 1 & 0 \\ -\sinθ & 0 & \cosθ \end{pmatrix} \\ R_z(θ):=&\begin{pmatrix} \cosθ & -\sinθ & 0 \\ \sinθ & \;\;\;\cosθ & 0 \\ 0 & 0 & 1 \end{pmatrix} \end{aligned}

回転軸

単位ベクトルで表される回転軸 $\vec{n}$ を極座標表示します。$z$ 軸方向の単位ベクトル $\hat{z}$ を $y$ 軸回りに $θ _ n$(天頂角)回転させてから、$z$ 軸回りに $ϕ _ n$(方位角)回転させます。

\begin{aligned} \vec{n} &=R_z(ϕ_n)R_y(θ_n)\hat{z} \\ &=\begin{pmatrix} \cosϕ_n & -\sinϕ_n & 0 \\ \sinϕ_n & \;\;\;\cosϕ_n & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \;\;\;\cosθ_n & 0 & \sinθ_n \\ 0 & 1 & 0 \\ -\sinθ_n & 0 & \cosθ_n \end{pmatrix} \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix} \\ &=\begin{pmatrix} \cosϕ_n & -\sinϕ_n & 0 \\ \sinϕ_n & \;\;\;\cosϕ_n & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \sinθ_n \\ 0 \\ \cosθ_n \end{pmatrix} \\ &=\begin{pmatrix} \sinθ_n\cosϕ_n \\ \sinθ_n\sinϕ_n \\ \cosθ_n \end{pmatrix} =:\begin{pmatrix} n_x \\ n_y \\ n_z \end{pmatrix} \end{aligned}

$\vec{n}$ は逆方向に回転させることで $\hat{z}$ に戻すことができます。

R_y(-θ_n)R_z(-ϕ_n)\vec{n}=\hat{z}

ロドリゲスの回転公式

回転軸 $\vec{n}$ 回りの $θ$ 回転を $R _ n(θ)$ とします。$\vec{n}$ を $z$ 軸方向に向ければ、$θ$ 回転は $z$ 軸回りとなりますが、回転後に軸を元に戻す必要があります。

R_n(θ)=\underbrace{R_z(ϕ_n)R_y(θ_n)}_{\text{元に戻す}}R_z(θ)\underbrace{R_y(-θ_n)R_z(-ϕ_n)}_{z\text{ 軸に向ける}}

これを計算すればロドリゲスの回転公式が得られます。長くなるため $\mathrm{s}=\sinθ,\mathrm{c}=\cosθ$ と略記します。

\begin{aligned} R_n(θ) =&\begin{pmatrix} n_z\cosϕ_n & -\sinϕ_n & n_x \\ n_z\sinϕ_n & \;\;\;\cosϕ_n & n_y \\ -\sinθ_n & 0 & n_z \end{pmatrix} \begin{pmatrix} \mathrm{c} & -\mathrm{s} & 0 \\ \mathrm{s} & \;\;\;\mathrm{c} & 0 \\ 0 & \;\;\;0 & 1 \end{pmatrix} \begin{pmatrix} n_z\cosϕ_n & n_z\sinϕ_n & -\sinθ_n \\ -\sinϕ_n & \;\;\;\cosϕ_n & 0 \\ n_x & n_y & n_z \end{pmatrix} \\ =&\begin{pmatrix} \mathrm{c}+{n_x}^2(1-\mathrm{c}) & -n_z\mathrm{s}+n_xn_y(1-\mathrm{c}) & \;\;\;n_y\mathrm{s}+n_zn_x(1-\mathrm{c}) \\ \;\;\;n_z\mathrm{s}+n_xn_y(1-\mathrm{c}) & \mathrm{c}+{n_y}^2(1-\mathrm{c}) & -n_x\mathrm{s}+n_yn_z(1-\mathrm{c}) \\ -n_y\mathrm{s}+n_zn_x(1-\mathrm{c}) & \;\;\;n_x\mathrm{s}+n_yn_z(1-\mathrm{c}) & \mathrm{c}+{n_z}^2(1-\mathrm{c}) \end{pmatrix} \\ =&\mathrm{c}I +\mathrm{s} \begin{pmatrix} 0 & -n_z & \;\;\;n_y \\ \;\;\;n_z & 0 & -n_x \\ -n_y & \;\;\;n_x & 0 \end{pmatrix} +(1-\mathrm{c}) \begin{pmatrix}n_x\\n_y\\n_z\end{pmatrix} \begin{pmatrix}n_x&n_y&n_z\end{pmatrix} \end{aligned}

考え方は単純ですが、計算は大変で、見通しが良くありません。

回転行列の構造

回転行列の構造を調べます。

$x$ 軸回りの回転行列を、対角成分とそれ以外の和に分解して、計算を進めます。

\begin{aligned} R_x(θ) &=\begin{pmatrix} 1 & 0 & 0 \\ 0 & \cosθ & -\sinθ \\ 0 & \sinθ & \;\;\;\cosθ \end{pmatrix} \\ &=\begin{pmatrix} 1 & 0 & 0 \\ 0 & \cosθ & 0 \\ 0 & 0 & \cosθ \end{pmatrix} +\begin{pmatrix} 0 & 0 & 0 \\ 0 & 0 & -\sinθ \\ 0 & \sinθ & 0 \end{pmatrix} \\ &=\begin{pmatrix} 1 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{pmatrix} +\cosθ \begin{pmatrix} 0 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} +\sinθ\underbrace{ \begin{pmatrix} 0 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{pmatrix} }_{=:N_x} \\ &=(I+{N_x}^2)+\cosθ(-{N_x}^2)+(\sinθ)N_x \\ &=I+(\sinθ)N_x+(1-\cosθ){N_x}^2 \\ &=\exp(θN_x) \end{aligned}

※ 最後の $\exp$ への式変形については、以下の記事を参照してください。

同様に他の座標軸周りの回転行列も計算すれば、同じ構造を持つことが分かります。

\begin{alignedat}{6} &N_x&&=\begin{pmatrix}0&0&0 \\ 0&0&-1 \\ 0&1&0\end{pmatrix},&\; &N_y&&=\begin{pmatrix}0&0&1 \\ 0&0&0 \\ -1&0&0\end{pmatrix},&\; &N_z&&=\begin{pmatrix}0&-1&0 \\ 1&0&0 \\ 0&0&0\end{pmatrix} \\ &{N_x}^2&&=-\begin{pmatrix}0&0&0 \\ 0&1&0 \\ 0&0&1\end{pmatrix},& &{N_y}^2&&=-\begin{pmatrix}1&0&0 \\ 0&0&0 \\ 0&0&1\end{pmatrix},& &{N_z}^2&&=-\begin{pmatrix}1&0&0 \\ 0&1&0 \\ 0&0&0\end{pmatrix} \end{alignedat}
\begin{alignedat}{3} R_x(θ)&=I+(\sinθ)N_x&&+(1-\cosθ){N_x}^2&&=\exp(θN_x) \\ R_y(θ)&=I+(\sinθ)N_y&&+(1-\cosθ){N_y}^2&&=\exp(θN_y) \\ R_z(θ)&=I+(\sinθ)N_z&&+(1-\cosθ){N_z}^2&&=\exp(θN_z) \\ \end{alignedat}

$R _ n(θ)$ のうち、$R _ z$ を $R _ y$ で両側から挟む部分を計算すると、この構造が保たれることが分かります。計算は長くなるため、結果だけを示します。

R_y(θ_n)R_z(θ)R_y(-θ_n) =\exp\{(\sinθ_n)N_x+(\cosθ_n)N_z\}

※ 計算はこのツイートを参照してください。

$\exp$ の肩は、$\hat{z}$ を $R _ y$ で回転させた成分に対応します。

\begin{aligned} R_y(θ_n)\hat{z} =&\begin{pmatrix} \;\;\;\cosθ_n & 0 & \sinθ_n \\ 0 & 1 & 0 \\ -\sinθ_n & 0 & \cosθ_n \end{pmatrix} \begin{pmatrix}0 \\ 0 \\ 1\end{pmatrix} \\ =&\begin{pmatrix}\sinθ_n \\ 0 \\ \cosθ_n\end{pmatrix} \\ =&(\sinθ_n)\hat{x}+(\cosθ_n)\hat{z} \\ ↦&(\sinθ_n)N_x+(\cosθ_n)N_z \end{aligned}

※ $\hat{x},\hat{y},\hat{z}$ と $N _ x,N _ y,N _ z$ は区別します。なお、四元数ではどちらも $i,j,k$ で表現します。詳細は以下の記事を参照してください。

つまり回転行列を $R _ y$ で両側から挟む作用は、回転軸に $R _ y$ を作用させることに対応します。

この延長線上で $R _ n(θ)$ の構造も理解できます。

\begin{aligned} \vec{n} &=R_z(ϕ_n)R_y(θ_n)\hat{z} \\ &=n_x\hat{x}+n_y\hat{y}+n_z\hat{z} \\ N &=n_xN_x + n_yN_y + n_zN_z \\ R_n(θ) &=R_z(ϕ_n)R_y(θ_n)R_z(θ)R_y(-θ_n)R_z(-ϕ_n) \\ &=I+(\sinθ)N+(1-\cosθ)N^2 \\ &=\exp(θN) \end{aligned}

回転軸を表す行列の代数

$N _ x, N _ y, N _ z$ には以下の関係があります。(成分計算で確認できます)

{N_x}^3=-N_x,\; {N_y}^3=-N_y,\; {N_z}^3=-N_z
N_xN_y-N_yN_x=N_z,\; N_yN_z-N_zN_y=N_x,\; N_zN_x-N_xN_z=N_y
N_xN_yN_z+N_yN_zN_x+N_zN_xN_y=-I
N_xN_yN_z=-N_zN_yN_x,\; N_yN_zN_x=-N_xN_zN_y,\; N_zN_xN_y=-N_yN_xN_z
N_xN_yN_x=N_xN_zN_x=N_yN_xN_y=N_yN_zN_y=N_zN_xN_z=N_zN_yN_z=O

これらを使って色々な性質が導けます。

(1) $N _ x N _ y - N _ y N _ x = N _ z$ の両辺に右から $N _ z$ を掛けます。

\begin{aligned} N_xN_yN_z-N_yN_xN_z&={N_z}^2 \\ N_xN_yN_z+N_zN_xN_y&={N_z}^2 \end{aligned}

同様にして求めた関係をまとめます。

\begin{aligned} N_xN_yN_z+N_yN_zN_x&={N_x}^2 \\ N_yN_zN_x+N_zN_xN_y&={N_y}^2 \\ N_zN_xN_y+N_xN_yN_z&={N_z}^2 \\ \end{aligned}

以上より次の関係が求まります。

{N_x}^2+{N_y}^2+{N_z}^2=2(N_xN_yN_z+N_yN_zN_x+N_zN_xN_y)=-2I

(2) $N _ x N _ y - N _ y N _ x = N _ z$ の両辺に左から $N _ x$ を掛けます。

{N_x}^2N_y-\underbrace{N_xN_yN_x}_{O}=N_xN_z
{N_x}^2N_y=N_xN_z

これに更に左から $N _ x$ を掛けます。

-N_xN_y={N_x}^2N_z

同様にして求めた関係をまとめます。赤字は左右から掛けた因子で、それが右辺にも残っています。

\begin{aligned} {\textcolor{red}{N_x}}^2N_y&=\;\;\;\textcolor{red}{N_x}N_z,& N_x{\textcolor{red}{N_y}}^2&=\;\;\;N_z\textcolor{red}{N_y} \\ {\textcolor{red}{N_x}}^2N_z&=-\textcolor{red}{N_x}N_y,& N_x{\textcolor{red}{N_z}}^2&=-N_y\textcolor{red}{N_z} \\ {\textcolor{red}{N_y}}^2N_x&=-\textcolor{red}{N_y}N_z,& N_y{\textcolor{red}{N_x}}^2&=-N_z\textcolor{red}{N_x} \\ {\textcolor{red}{N_y}}^2N_z&=\;\;\;\textcolor{red}{N_y}N_x,& N_y{\textcolor{red}{N_z}}^2&=\;\;\;N_x\textcolor{red}{N_z} \\ {\textcolor{red}{N_z}}^2N_x&=\;\;\;\textcolor{red}{N_z}N_y,& N_z{\textcolor{red}{N_x}}^2&=\;\;\;N_y\textcolor{red}{N_x} \\ {\textcolor{red}{N_z}}^2N_y&=-\textcolor{red}{N_z}N_x,& N_z{\textcolor{red}{N_y}}^2&=-N_x\textcolor{red}{N_y} \end{aligned}

(3) $N_xN_yN_z=-N_zN_yN_x$ の両辺に右から $N_x$ を掛けます。

\begin{aligned} N_xN_yN_zN_x&=-N_zN_yN_xN_x \\ N_xN_yN_zN_x&=N_zN_zN_x \\ N_xN_yN_zN_x&=N_zN_y \end{aligned}

異なる 2 つの因子を、両側から別の因子(赤字)で挟むと、内側の因子の順番が反転すると解釈できます。

\textcolor{red}{N_x}N_yN_z\textcolor{red}{N_x}=N_zN_y

また、計算過程の右辺に注目します。

-N_zN_yN_xN_x=N_zN_zN_x=N_zN_y

異なる 2 つの因子に、右側から別の因子の 2 乗(赤字)を掛けると、符号が反転すると解釈できます。

N_zN_y\textcolor{red}{{N_x}^2}=\textcolor{red}{-}N_zN_y

同様に左側から掛けても成り立ちます。

\textcolor{red}{{N_x}^2}N_zN_y=\textcolor{red}{-}N_zN_y

関連記事

四元数による回転と回転行列の関係を扱います。

クリフォード代数で回転を扱います。四元数との比較を含みます。