三次元回転におけるロドリゲスの回転公式 (英 : Rodrigues' rotation formula )とは、ベクトル 空間において、与えられた回転軸に対して回転を行うための効率的なアルゴリズムを指す。またこの公式は、任意の3つの基底ベクトル に対する、SO (3) 群上の回転行列 を用いた変換の軸角度表現を与えている。つまり、この式は so (3) (SO(3) のリー代数 )から SO(3) への指数写像 を、行列の指数関数 を計算せずに与えるアルゴリズムとなっている。
R 3 上の回転軸を表す単位ベクトル 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 [n 1 n 2 n 3 ] と表した場合、上記の行列 R n (θ ) の (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}}\|}}}
もし回転面を表すベクトルが事前に分かっている場合は、この形式を用いる。物理学 における例として、トーマスの歳差運動 が挙げられる。
R 3 上のベクトル r = t [rx ry rz ] を、単位ベクトル n = t [nx ny nz ] を軸に、右手の法則に基づく回転角度 θ だけ回転させた結果得られたベクトルを s = t [sx sy sz ] とすると、s は以下のように表される[ 1] 。
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}}}