ロドリゲスの回転公式

三次元回転におけるロドリゲスの回転公式（英: Rodrigues' rotation formula）とは、ベクトル空間において、与えられた回転軸に対して回転を行うための効率的なアルゴリズムを指す。またこの公式は、任意の3つの基底ベクトルに対する、SO(3) 群上の回転行列を用いた変換の軸角度表現を与えている。つまり、この式は so(3)（SO(3) のリー代数）から SO(3) への指数写像を、行列の指数関数を計算せずに与えるアルゴリズムとなっている。 R3 上の回転軸を表す単位ベクトル n = t[nx ny nz], 右手の法則に基づく回転角度 θ に対して、ロドリゲスの回転公式は次の様に与えられる。 R n ( θ ) = e θ K ( n ) = E + ( sin ⁡ θ ) K ( n ) + ( 1 − cos ⁡ θ ) K 2 ( n ) = [ n x 2 ( 1 − cos ⁡ θ ) + cos ⁡ θ n x n y ( 1 − cos ⁡ θ ) − n z sin ⁡ θ n z n x ( 1 − cos ⁡ θ ) + n y sin ⁡ θ n x n y ( 1 − cos ⁡ θ ) + n z sin ⁡ θ n y 2 ( 1 − cos ⁡ θ ) + cos ⁡ θ n y n z ( 1 − cos ⁡ θ ) − n x sin ⁡ θ n z n x ( 1 − cos ⁡ θ ) − n y sin ⁡ θ n y n z ( 1 − cos ⁡ θ ) + n x sin ⁡ θ n z 2 ( 1 − cos ⁡ θ ) + cos ⁡ θ ] {\displaystyle {\begin{aligned}R_{\boldsymbol {n}}(\theta )&=e^{\theta K({\boldsymbol {n}})}\\&=E+(\sin \theta )K({\boldsymbol {n}})+(1-\cos \theta )K^{2}({\boldsymbol {n}})\\&={\begin{bmatrix}n_{x}^{2}\left(1-\cos \theta \right)+\cos \theta &n_{x}n_{y}\left(1-\cos \theta \right)-n_{z}\sin \theta &n_{z}n_{x}\left(1-\cos \theta \right)+n_{y}\sin \theta \\n_{x}n_{y}\left(1-\cos \theta \right)+n_{z}\sin \theta &n_{y}^{2}\left(1-\cos \theta \right)+\cos \theta &n_{y}n_{z}\left(1-\cos \theta \right)-n_{x}\sin \theta \\n_{z}n_{x}\left(1-\cos \theta \right)-n_{y}\sin \theta &n_{y}n_{z}\left(1-\cos \theta \right)+n_{x}\sin \theta &n_{z}^{2}\left(1-\cos \theta \right)+\cos \theta \\\end{bmatrix}}\end{aligned}}} ここで E は3次単位行列であり、 K ( n ) = [ 0 − n z n y n z 0 − n x − n y n x 0 ] {\displaystyle \textstyle K({\boldsymbol {n}})={\begin{bmatrix}0&-n_{z}&n_{y}\\n_{z}&0&-n_{x}\\-n_{y}&n_{x}&0\end{bmatrix}}} は n との外積に対応する交代行列（歪対称行列、或いは反対称行列とも呼ばれる）である。 また、単位軸ベクトル n を n = t[n1 n2 n3] と表した場合、上記の行列 Rn(θ) の (i, j) 成分はクロネッカーのデルタ及び符号関数を用いて以下のように表すことも出来る。 n i n j ( 1 − cos ⁡ θ ) + δ i j cos ⁡ θ + { sgn ⁡ ( i − j ) } [ ∑ k = 1 3 sgn ⁡ { ( i − k ) ( j − k ) } n k ] sin ⁡ θ {\displaystyle \textstyle n_{i}n_{j}(1-\cos \theta )+\delta _{ij}\cos \theta +\{\operatorname {sgn}(i-j)\}\left[\sum _{k=1}^{3}\operatorname {sgn}\{(i-k)(j-k)\}n_{k}\right]\sin \theta } なお、上記の添え字 k は結局、集合 {1, 2, 3} から集合 {i, j} を取り除いた残り1つの元に当たるもののみが残るから、差集合の考え方を用いて以下のように表しても良い。 n i n j ( 1 − cos ⁡ θ ) + δ i j cos ⁡ θ + { sgn ⁡ ( j − i ) } ( − 1 ) i + j n k sin ⁡ θ ( k ∈ { 1 , 2 , 3 } ∖ { i , j } ) {\displaystyle \textstyle n_{i}n_{j}(1-\cos \theta )+\delta _{ij}\cos \theta +\{\operatorname {sgn}(j-i)\}(-1)^{i+j}n_{k}\sin \theta \qquad (k\in \{1,2,3\}\setminus \{i,j\})} 他の表現として、回転面を表すゼロでないベクトル a, b に対する軸ベクトルとしてクロス積 a × b を用いることができる。このとき、回転角 θ を a から離れた、もしくは b に向けた角として表せる。2つのベクトルがなす角を α とすると、θ と同様の意味を α に与えることができる（ただし2つは必ずしも一致しない）。このとき、単位軸ベクトル n は次のように書ける。 n = a × b ‖ a × b ‖ {\displaystyle {\boldsymbol {n}}={\frac {{\boldsymbol {a}}\times {\boldsymbol {b}}}{\|{\boldsymbol {a}}\times {\boldsymbol {b}}\|}}} もし回転面を表すベクトルが事前に分かっている場合は、この形式を用いる。物理学における例として、トーマスの歳差運動が挙げられる。 R3 上のベクトル r = t[rx ry rz] を、単位ベクトル n = t[nx ny nz] を軸に、右手の法則に基づく回転角度 θ だけ回転させた結果得られたベクトルを s = t[sx sy sz] とすると、s は以下のように表される。 s = ( cos ⁡ θ ) r + ( 1 − cos ⁡ θ ) ( n ⋅ r ) n + ( sin ⁡ θ ) ( n × r ) = ( cos ⁡ θ ) r + ( 1 − cos ⁡ θ ) { n × ( n × r ) + r } + ( sin ⁡ θ ) ( n × r ) = r + ( sin ⁡ θ ) ( n × r ) + ( 1 − cos ⁡ θ ) { n × ( n × r ) } {\displaystyle {\begin{aligned}{\boldsymbol {s}}&=(\cos \theta ){\boldsymbol {r}}+(1-\cos \theta )({\boldsymbol {n}}\cdot {\boldsymbol {r}}){\boldsymbol {n}}+(\sin \theta )({\boldsymbol {n}}\times {\boldsymbol {r}})\\&=(\cos \theta ){\boldsymbol {r}}+(1-\cos \theta )\{{\boldsymbol {n}}\times ({\boldsymbol {n}}\times {\boldsymbol {r}})+{\boldsymbol {r}}\}+(\sin \theta )({\boldsymbol {n}}\times {\boldsymbol {r}})\\&={\boldsymbol {r}}+(\sin \theta )({\boldsymbol {n}}\times {\boldsymbol {r}})+(1-\cos \theta )\{{\boldsymbol {n}}\times ({\boldsymbol {n}}\times {\boldsymbol {r}})\}\end{aligned}}} なお、2番目の等号はベクトル三重積及び n が単位ベクトルであることを用いた。 ここで、n × r 及び n × (n × r) を成分表示（列ベクトル表示）し、正方行列と r の積の形に変形すると、 n × r = [ n y r z − n z r y n z r x − n x r z n x r y − n y r x ] = [ 0 − n z n y n z 0 − n x − n y n x 0 ] [ r x r y r z ] = K ( n ) r {\displaystyle {\begin{aligned}{\boldsymbol {n}}\times {\boldsymbol {r}}&={\begin{bmatrix}n_{y}r_{z}-n_{z}r_{y}\\n_{z}r_{x}-n_{x}r_{z}\\n_{x}r_{y}-n_{y}r_{x}\end{bmatrix}}\\&={\begin{bmatrix}0&-n_{z}&n_{y}\\n_{z}&0&-n_{x}\\-n_{y}&n_{x}&0\end{bmatrix}}{\begin{bmatrix}r_{x}\\r_{y}\\r_{z}\end{bmatrix}}\\&=K({\boldsymbol {n}}){\boldsymbol {r}}\end{aligned}}} n × ( n × r ) = ( n ⋅ r ) n − r = [ ( n x r x + n y r y + n z r z ) n x − r x ( n x r x + n y r y + n z r z ) n y − r y ( n x r x + n y r y + n z r z ) n z − r z ] = [ n x 2 − 1 n x n y n z n x n x n y n y 2 − 1 n y n z n z n x n y n z n z 2 − 1 ] [ r x r y r z ] = [ − n y 2 − n z 2 n x n y n z n x n x n y − n z 2 − n x 2 n y n z n z n x n y n z − n x 2 − n y 2 ] [ r x r y r z ] = [ 0 − n z n y n z 0 − n x − n y n x 0 ] 2 [ r x r y r z ] = K 2 ( n ) r {\displaystyle {\begin{aligned}{\boldsymbol {n}}\times ({\boldsymbol {n}}\times {\boldsymbol {r}})&=({\boldsymbol {n}}\cdot {\boldsymbol {r}}){\boldsymbol {n}}-{\boldsymbol {r}}\\&={\begin{bmatrix}(n_{x}r_{x}+n_{y}r_{y}+n_{z}r_{z})n_{x}-r_{x}\\(n_{x}r_{x}+n_{y}r_{y}+n_{z}r_{z})n_{y}-r_{y}\\(n_{x}r_{x}+n_{y}r_{y}+n_{z}r_{z})n_{z}-r_{z}\end{bmatrix}}\\&={\begin{bmatrix}n_{x}^{2}-1&n_{x}n_{y}&n_{z}n_{x}\\n_{x}n_{y}&n_{y}^{2}-1&n_{y}n_{z}\\n_{z}n_{x}&n_{y}n_{z}&n_{z}^{2}-1\end{bmatrix}}{\begin{bmatrix}r_{x}\\r_{y}\\r_{z}\end{bmatrix}}\\&={\begin{bmatrix}-n_{y}^{2}-n_{z}^{2}&n_{x}n_{y}&n_{z}n_{x}\\n_{x}n_{y}&-n_{z}^{2}-n_{x}^{2}&n_{y}n_{z}\\n_{z}n_{x}&n_{y}n_{z}&-n_{x}^{2}-n_{y}^{2}\end{bmatrix}}{\begin{bmatrix}r_{x}\\r_{y}\\r_{z}\end{bmatrix}}\\&={\begin{bmatrix}0&-n_{z}&n_{y}\\n_{z}&0&-n_{x}\\-n_{y}&n_{x}&0\end{bmatrix}}^{2}{\begin{bmatrix}r_{x}\\r_{y}\\r_{z}\end{bmatrix}}\\&=K^{2}({\boldsymbol {n}}){\boldsymbol {r}}\end{aligned}}} であるから、以下に示す通り、本節のベクトル表現は前節の行列表現と同等であることが分かる。 s = r + ( sin ⁡ θ ) ( n × r ) + ( 1 − cos ⁡ θ ) { n × ( n × r ) } = r + ( sin ⁡ θ ) K ( n ) r + ( 1 − cos ⁡ θ ) K 2 ( n ) r = { E + ( sin ⁡ θ ) K ( n ) + ( 1 − cos ⁡ θ ) K 2 ( n ) } r {\displaystyle {\begin{aligned}{\boldsymbol {s}}&={\boldsymbol {r}}+(\sin \theta )({\boldsymbol {n}}\times {\boldsymbol {r}})+(1-\cos \theta )\{{\boldsymbol {n}}\times ({\boldsymbol {n}}\times {\boldsymbol {r}})\}\\&={\boldsymbol {r}}+(\sin \theta )K({\boldsymbol {n}}){\boldsymbol {r}}+(1-\cos \theta )K^{2}({\boldsymbol {n}}){\boldsymbol {r}}\\&=\{E+(\sin \theta )K({\boldsymbol {n}})+(1-\cos \theta )K^{2}({\boldsymbol {n}})\}{\boldsymbol {r}}\end{aligned}}} ^ 『ロドリゲスの回転公式』 - KIT物理ナビゲーション（金沢工業大学） 『ロドリゲスの回転公式（3次元の回転行列）』 - 高校数学の美しい物語 表示 編集