クォータニオン

「四元数」とも呼ばれる. 三次元回転をコンパクトに表現できる,補間がやりやすいなどの利点があるが, 結局同次座標変換行列に落とさないと使えなかったりする. 直感的でないという最大の欠点がある.

回転を表すクォータニオン

普通のクォータニオンは

とかあらわされる.は虚部.

回転を表すクォータニオンの場合,大きさが1のクォータニオンとなる. 回転量を,回転軸をとしたとき,これをあらわすクォータニオンは

当然,全要素の符号を反転させても同じ回転を表現できる. なお,

これは同じ回転を意味し

これは逆回転を意味する

基本的な演算

クォータニオンの乗算の定義は

ちなみに

回転を表すクォータニオンを合成するときは単純に乗算すればよい.

クォータニオンaをbで回転させてクォータニオンcをつくる場合.

コーディングの際にはたぶん展開しても簡単にならないと思うので素直に乗算で組んでしまうのがいいと思う.

他の表現との変換

回転行列の作り方

右手座標列ベクトル形式として,

回転行列からの作り方

回転行列の各要素を以下のように表す.

試しに対角要素を全部足してみると.

定義から,であるので, ということは,

したがって,

として,同様に対角成分の加減算でも求めることができる.

ただし符号判定の必要がある (定義に戻ると-180度から180度の範囲でwは正だがx,y,zは不定) ため, 実際の計算の際は対角以外の要素を使って判定していくことになる.

axis-angle

回転量を,回転軸をとしたとき

回転の合成は直接計算では得ることができない. クォータニオンとの変換は簡単なのでそこを経由するとよい.

変換

回転行列への変換はRodoriguesの公式を使う.

逆変換

対数クォータニオン:exponential map

OpenCVでは「回転ベクトル」と呼ばれている. 回転軸*回転角度で表される.三次元.

こうすることで,

ということらしい.

表現形式は文献,実装によって異なるようだが最終的に座標変換がうまくいっていれば問題はない? DirectXでは

参考文献