クォータニオン球面補間デモ (Slerp/Lerp/LnLerp) - 視覚化 Webアプリ
Normal/Logarithmic Quaternion Lerp/Slerpについて視覚化したjavascript WEBアプリです
A javascript web application that visualizes Normal/Logarithmic Quaternion Lerp/Slerp
Base X
Y
Z
Src X
Y
Z
θ
Dest X
Y
Z
θ
Auto dθ
Slerp:cyan,Lerp:white,LnLerp:pink
# * クォータニオン球面補間表示
このWebアプリケーションは、3Dグラフィックスや物理シミュレーションで用いられる
クォータニオン(四元数)の補間の仕組みを、3次元空間で視覚的に比較・学習するためのツールです。
抽象的で理解が難しいクォータニオンの補間経路の違いを、
ユーザーが設定した軸と角度に基づいてリアルタイムで描画します。
* アプリケーションの機能
ユーザーは、始点(Src)と終点(Dest)の回転軸と回転角度を自由に設定できます。
アプリは、その設定された回転を達成するための3種類の補間経路を同時に計算し、
色分けして球体上に表示します。
* 1. 補間アルゴリズムの比較
以下の3種類の補間経路を描画し、その違いを視覚的に比較できます。
| 補間方法 | 経路の色 | 特徴 | 数学的経路 |
| :----------------------------- | :------------- | :------------------------------------------------------------------------------------------------------------------------ | :------------------ |
| SLERP (球面線形補間) | シアン(青緑) | 4次元の単位球上で最短距離(大円弧)を一定の角速度で移動します。 | Shortest arc |
| LERP (線形補間) | ホワイト(白) | 4次元空間で直線をたどり、その結果を球面上に射影します。経路は球の中心に向かってわずかに凹みます。 | Straight line in 4D |
| LnQuat LERP (対数空間線形補間) | ピンク | クォータニオンを対数空間に変換し、そこで線形補間(LSLERP)を行います。SLERPと同じ最短経路(大円弧)をたどるのが理想です。 | Logarithmic arc |
* 2. 特殊なケースの検証
このシミュレーターは、クォータニオンの理解を深める上で重要な以下の特殊な挙動を検証できます。
回転軸が一致する場合: 始点と終点の軸が同じでも、角度差に応じた補間が正しく行われること
を確認できます。(LnQuat LERPのデバッグ済み)
最短経路の選択: SLERP/LERPが意図的に遠回り(最短ではない経路)を選択する設計になっている場合、
LnQuat LERPのみが最短経路を示す現象を確認できます。
視覚的な差: LERPの線が他の二つよりわずかに球の中心に凹む様子を、入力パラメータを変えて確認できます。
* 利用対象
3Dゲームエンジンやグラフィックスを学ぶ学生
クォータニオンベースのモーションや物理を実装する開発者
クォータニオン補間の原理を視覚的に理解したいすべての人
# クォータニオンの正規化とデバッグの落とし穴(SLERPの前提条件)
クォータニオンのデバッグは難しい場合があります。一見些細な逸脱が重大な問題につながる可能性があるからです。
以前のバージョンの実装(VB+C#+XNA)では、正規化関連のバグのほとんどは既に修正されていました。
しかし、JavaScriptへの移植中に、特に加算演算において正規化を削除すると、計算が概念的に理解しやすくなることがわかりました。
しかし、残念ながら、これにより**クォータニオンの正規化に関連する潜在的なバグ**が発生しました。
クォータニオン補間LERP(線形補間)やSLERP(球面線形補間)などの補間手法は、効率的な計算のために**ベクトル成分の内積**に大きく依存しています。
N6LQuaternion.Slerp2()メソッドでは、SLERPを
ベクトル加算(または減算、アルゴリズムによって異なります)を利用して解くのが一般的なアプローチです。
**ここで重大な問題が発生します。これらの加算(または同様の)演算に関係するクォータニオンが**
**適切に正規化されていない場合、補間において致命的なエラーが発生します。**
正規化されていないクォータニオンは、基本的な加算演算ではより直感的に思えるかもしれませんが、
SLERPのように正確な正規化が最も重要となるコンテキストで使用すると、重大なリスクを伴います。
したがって、**正規化されていないクォータニオンによる加算は概念的には単純に見えますが**
**回転ベースの計算では危険です。** 回転や補間などの演算においてクォータニオンの大きさが重要な場合は、
必ずクォータニオンが正規化されていることを確認してください。
# 対数クォータニオンの正規化とデバッグの落とし穴(リー代数空間)
・ 対数クォータニオン (ln(q)) の場合
対数クォータニオンは、回転 q が属するリー群(回転群 SO(3))から
そのリー代数(回転の瞬間の速度空間)への写像(マッピング)です。
リー代数の空間は、回転の軸と角度の情報(ベクトル成分)のみで構成され、回転軸の大きさは角度に対応します。
ln(q)=[0, (θ/2)v] (v は回転軸、θ は角度)
この空間では、クォータニオンの大きさが 1 であること(単位クォータニオンであること)は関係ありません。
むしろ、このベクトル(対数クォータニオン)の大きさ(ノルム)が回転角度の情報を含んでいます。
したがって、対数クォータニオンを正規化してしまうと、重要な回転角度の情報(θ/2)が失われ、
結果的に補間が破綻してしまいます。
戻る