回転行列と回転ベクトル
3次元空間の回転行列 (rotation matrix) Rとは
- 3×3
- 直交行列 (inv(R)=R'; R*R' = R'*R = I) プライムは転置ね。
- det R = 1 *1
を満たす実行列. この集合 (この行列の作用による線型変換の集合) が 3 次の特殊直交群 SO(3)。
大事なこと
回転行列は,
- 作用させるベクトルの縦横
- 回転の向き (右手(右ねじ)回転か左手回転か)
- 座標系の向き (右手系 or 左手系)
- 点(座標)変換か, 座標系変換か(まぁ座標系の変換の場合は、ベクトルに掛けないと思うけど)
をはっきりさせて置かないといろいろ困る。
ここでは、縦ベクトル右手系右手回転系点変換を仮定。
↓超分かりやすい
- http://sequoia-web.hp.infoseek.co.jp/tsudoi/tsudoi06.shtml
- 上のサイトがなくなってしまったので、 web archive に残ってるもの
性質
- 縦ベクトル用の回転行列(左から掛ける)は横ベクトル用の回転行列(右から掛ける)と転置の関係にある
- 回転の向きも転置の関係にある
- 座標系の向きも転置の関係にある
- 点変換と座標系変換も転置の関係にある
回転公式
ロドリゲス *2 の公式と呼ばれている*3
任意の回転には回転軸が必ず存在するので、その軸(自由度2)と回転角(自由度1)によって回転行列が構成できる。
単位ベクトル r と回転角 t によって
R = I + sin(t)[r]× + (1−cos(t))[r]×2
(展開は省略。ただし、|r| = 1 より[r]×2 = [−x2−1 xy zx; xy y2−1 yz; zx zy z2−1] = rr'−I となる。)
したがって,
R = cos(t)I + sin(t)rr' + (1−cos(t))[r]×2
とも書ける。
逆に
sin(t)[r]× = (R−R')/2
という関係から, R → r, t の変換ができる。
(OpenCV では Rodrigues2()
でどちら向きの変換もやってくれる。)