Correspondence between quaternions and 3D rotations
ベルソル として知られる 単位 四元数は 、 3次元空間における要素の 空間的な 向き と 回転 を表すための便利な 数学的 表記法を提供します。具体的には、任意の軸を中心とした 軸角回転に関する情報をエンコードします。回転四元数と向きの四元数は、 コンピュータグラフィックス [1] 、 コンピュータビジョン 、 ロボット工学 [2] 、 ナビゲーション 、 分子動力学 、 飛行力学 [3] 、 衛星 の 軌道力学 [ 4] 、 結晶構造 解析 [5] などに応用されています
回転を表すために使用される場合、単位四元数は 3次元回転群 を表すため、回転四元 数とも呼ばれます。 向き (基準座標系に対する回転) を表すために使用される場合、 向き四元数 または 姿勢四元数と呼ばれます。 オイラー軸 を表す 単位軸を中心としたラジアン の固定点の周りの空間回転は、 四元数で与えられます。 ここで、 およびです 。 θ {\displaystyle \theta } ( X , Y , Z ) {\displaystyle (X,Y,Z)} ( C , X S , Y S , Z S ) {\displaystyle (C,X\,S,Y\,S,Z\,S)} C = cos ( θ / 2 ) {\displaystyle C=\cos(\theta /2)} S = sin ( θ / 2 ) {\displaystyle S=\sin(\theta /2)}
回転行列 と比較して 、四元数はよりコンパクトで効率的であり、 数値的に安定しています 。 オイラー角 と比較して、四元数はより簡単に 構成できます。ただし、四元数は直感的で理解しやすいわけではなく、 正弦 と余弦の 周期的な性質 により 、自然周期だけ正確に異なる回転角度は同一の四元数にエンコードされ、 ラジアン単位 で復元された角度は に制限されます 。 [ 0 , 2 π ] {\displaystyle [0,2\pi ]}
四元数を回転として使用する オイラー軸( )を中心とした角度 による 回転の3D視覚化 e ^ {\displaystyle {\hat {e}}} θ {\displaystyle \theta } 3次元空間において、 オイラーの回転定理によれば、 剛体 または座標系の 固定点を中心とした任意の回転または回転の連続は、固定点を通る 固定軸( オイラー軸 と呼ばれる)を中心とした所定の角度の単一回転に相当します。 [6] オイラー軸は通常、 単位ベクトル ( 図では)で表されます。したがって、3次元における任意の回転は、 ベクトル と角度で表すことができます 。 θ {\displaystyle \theta } u → {\displaystyle {\vec {u}}} e ^ {\displaystyle {\hat {e}}} u → {\displaystyle {\vec {u}}} θ {\displaystyle \theta }
四元数は、この 軸と角度の表現を 4つの実数を用いて符号化する簡単な方法を提供し、対応する回転を 、 R 3 における 原点 を基準とした 点を表す 位置ベクトル (x,y,z) に適用(計算)するために使用できます。 [7]
(2, 3, 4) や ( a x , a y , a z ) などの ユークリッドベクトルは、 2 i + 3 j + 4 k または a x i + a y j + a z k と書き直すことができます 。ここで、 i 、 j 、 k は3つの 直交座標軸 (伝統的には x 、 y 、 z )を表す単位ベクトルです。また、ユークリッドベクトル ( a x 、 a y 、 a z )を純粋四元数 (0, a x 、 a y 、 a z ) のベクトル部分として解釈することにより、基本四元数単位の乗法規則にも従います 。
単位ベクトルによって定義される軸の周りの 角度の回転は、 θ {\displaystyle \theta }
u = ( u x , u y , u z ) = u x i + u y j + u z k {\displaystyle \mathbf {u} =(u_{x},u_{y},u_{z})=u_{x}\mathbf {i} +u_{y}\mathbf {j} +u_{z}\mathbf {k} } 単位四元数 q による共役 で表すことができます 。四元数の積は1となるため、 指数関数の テイラー級数 を用いて オイラーの公式 を 拡張すると 次のようになります ( 0 + u x i + u y j + u z k ) ( 0 − u x i − u y j − u z k ) {\displaystyle \ (0+u_{x}\mathbf {i} +u_{y}\mathbf {j} +u_{z}\mathbf {k} )(0-u_{x}\mathbf {i} -u_{y}\mathbf {j} -u_{z}\mathbf {k} )}
q = e θ 2 ( u x i + u y j + u z k ) = cos θ 2 + ( u x i + u y j + u z k ) sin θ 2 = cos θ 2 + u sin θ 2 {\displaystyle \mathbf {q} =e^{{\frac {\theta }{2}}{(u_{x}\mathbf {i} +u_{y}\mathbf {j} +u_{z}\mathbf {k} )}}=\cos {\frac {\theta }{2}}+(u_{x}\mathbf {i} +u_{y}\mathbf {j} +u_{z}\mathbf {k} )\sin {\frac {\theta }{2}}=\cos {\frac {\theta }{2}}+\mathbf {u} \sin {\frac {\theta }{2}}} [8] によれば 、3次元空間の 通常のベクトル(純粋四元数のベクトル部分として考えた場合)に、 p ′ と q の 共役を 評価することで、目的の回転を適用できることがわかる 。 p = ( p x , p y , p z ) = p x i + p y j + p z k {\displaystyle \mathbf {p} =(p_{x},p_{y},p_{z})=p_{x}\mathbf {i} +p_{y}\mathbf {j} +p_{z}\mathbf {k} } p ′ {\displaystyle \mathbf {p'} }
L ( p ′ ) := q p ′ q − 1 = ( 0 , r ) , {\displaystyle L(\mathbf {p'} ):=\mathbf {q} \mathbf {p'} \mathbf {q} ^{-1}=(0,\mathbf {r} ),} r = ( cos 2 θ 2 − sin 2 θ 2 | | u | | 2 ) p + 2 sin 2 θ 2 ( u ⋅ p ) u + 2 cos θ 2 sin θ 2 ( u × p ) , {\displaystyle \mathbf {r} =(\cos ^{2}{\frac {\theta }{2}}-\sin ^{2}{\frac {\theta }{2}}||\mathbf {u} ||^{2})\mathbf {p} +2\sin ^{2}{\frac {\theta }{2}}(\mathbf {u} \cdot \mathbf {p} )\mathbf {u} +2\cos {\frac {\theta }{2}}\sin {\frac {\theta }{2}}(\mathbf {u} \times \mathbf {p} ),} ハミルトン積 を用いて、純粋四元数 L( p ′ ) = (0, r x , r y , r z ) のベクトル部分は、 回転後の点の新しい位置ベクトルです。プログラムによる実装では、共役は、ベクトル部分が p である純粋四元数を構築し、次に四元数共役を実行することによって実現されます。結果として得られる純粋四元数のベクトル部分は、目的のベクトル r です。明らかに、は 四元数空間の自身への線形変換を提供します。 [9] また、 はユニタリなので、変換は等長変換です。また、 そしてなので、 平行ベクトルは不変です。したがって、 をの ベクトル部分に平行なベクトル とのベクトル部分に垂直なベクトルとして 分解し、を の法線成分に 適用すると 回転することを示すことで、主張が示されます。したがって、 をのベクトル部分に直交する の成分とし 、とします。のベクトル部分 は次のように与えられる ことがわかります。 L {\displaystyle L} q {\displaystyle \mathbf {q} } L ( q ) = q {\displaystyle L(\mathbf {q} )=\mathbf {q} } L {\displaystyle L} q {\displaystyle \mathbf {q} } p {\displaystyle \mathbf {p} } ( u x , u y , u z ) sin θ 2 {\displaystyle (u_{x},u_{y},u_{z})\sin {\frac {\theta }{2}}} q {\displaystyle \mathbf {q} } q {\displaystyle \mathbf {q} } L {\displaystyle L} p {\displaystyle \mathbf {p} } n {\displaystyle \mathbf {n} } p {\displaystyle \mathbf {p} } q {\displaystyle \mathbf {q} } n T = n × u {\displaystyle \mathbf {n} _{T}=\mathbf {n} \times \mathbf {u} } L ( 0 , n ) {\displaystyle L(0,\mathbf {n} )}
( cos 2 θ 2 − sin 2 θ 2 ) n + 2 ( cos θ 2 sin θ 2 ) n T = cos θ n + sin θ n T {\displaystyle \left(\cos ^{2}{\frac {\theta }{2}}-\sin ^{2}{\frac {\theta }{2}}\right)\mathbf {n} +2\left(\cos {\frac {\theta }{2}}\sin {\frac {\theta }{2}}\right)\mathbf {n} _{T}=\cos \theta \mathbf {n} +\sin \theta \mathbf {n} _{T}} 。 p ′ と q の共役は、 より少ない算術演算で次のように表すことができます
r = p + 2 cos θ 2 sin θ 2 ( u × p ) + 2 sin 2 θ 2 u × ( u × p ) . {\displaystyle \mathbf {r} =\mathbf {p} +2\cos {\frac {\theta }{2}}\sin {\frac {\theta }{2}}(\mathbf {u} \times \mathbf {p} )+2\sin ^{2}{\frac {\theta }{2}}\mathbf {u} \times (\mathbf {u} \times \mathbf {p} ).} 四元数に依存しない幾何学的事実は、物理的な回転から回転変換行列 への 2 対 1 の写像が存在することです 。 0 ⩽ ⩽の場合、 による 物理的な回転 とによる物理的な回転は どちら も、中間の向きを通る互いに素な経路によって同じ最終向きを実現します。上記の qの式にこれらのベクトルと角度を代入すると、 q が 最初の回転を表す場合、 − q が 2 番目の回転を表すこと がわかります。 これは、 q による共役と − q による共役によって必ず同じ回転変換行列が生成されることの幾何学的証明です。 この事実は、共役が qの 2 次であるため q の符号が 打ち消されて結果に影響しないことを指摘することで代数的に確認されます。 ( SU(2) から SO(3) への 2:1 写像 を参照) 両方の回転が半回転の場合 、 q と − q の 実座標はどちらも 0 になります。それ以外の場合、一方は正の実部を持ち、角度θ より小さい回転を表します。 もう一方は負の実部を持ち、角度θ より大きい回転を表します 。 θ {\displaystyle \theta } 2 π {\displaystyle 2\pi } u → {\displaystyle {\vec {u}}} θ {\displaystyle \theta } − u → {\displaystyle -{\vec {u}}} 2 π − θ {\displaystyle 2\pi -\theta } ( θ = π ) {\displaystyle (\theta =\pi )} π {\displaystyle \pi } π {\displaystyle \pi }
数学的には、この操作は、四元数間の3次元空間を構成する すべての「純粋な」四元数 p (実部がゼロのもの)の集合を、軸 u を中心とした角度 θ の回転によって、それ自体に取り込みます 。(各実四元数は、この操作によってそれ自体に取り込まれます。ただし、3次元空間での回転の目的では、実四元数は無視します。)
視線が と同じ方向を向いている場合、回転は時計回りです 。 u → {\displaystyle {\vec {u}}}
この [ どの? ] 例では、 q は 単位四元数 であり、
q − 1 = e − θ 2 ( u x i + u y j + u z k ) = cos θ 2 − ( u x i + u y j + u z k ) sin θ 2 . {\displaystyle \mathbf {q} ^{-1}=e^{-{\frac {\theta }{2}}{(u_{x}\mathbf {i} +u_{y}\mathbf {j} +u_{z}\mathbf {k} )}}=\cos {\frac {\theta }{2}}-(u_{x}\mathbf {i} +u_{y}\mathbf {j} +u_{z}\mathbf {k} )\sin {\frac {\theta }{2}}.} したがって、2つの四元数の積による共役は、これらの四元 数による共役の合成です。p と q が単位四元数である場合、 pq による回転(共役) は
p q v → ( p q ) − 1 = p q v → q − 1 p − 1 = p ( q v → q − 1 ) p − 1 {\displaystyle \mathbf {pq} {\vec {v}}(\mathbf {pq} )^{-1}=\mathbf {pq} {\vec {v}}\mathbf {q} ^{-1}\mathbf {p} ^{-1}=\mathbf {p} (\mathbf {q} {\vec {v}}\mathbf {q} ^{-1})\mathbf {p} ^{-1}} 、 これはq で回転(共役)してから p で回転(共役)するのと同じです 。結果のスカラー成分は必然的にゼロになります
回転の逆四元数は、逆の回転です。なぜなら、 だからです 。四元数回転の2乗は、同じ軸の周りの角度の2倍の回転です。より一般的には、 q n は、 q と同じ軸の周りの角度の n 倍の回転です 。これは任意の実数 n に拡張でき 、空間方向間の滑らかな補間が可能になります。Slerp を 参照してください。 q − 1 ( q v → q − 1 ) q = v → {\displaystyle \mathbf {q} ^{-1}(\mathbf {q} {\vec {v}}\mathbf {q} ^{-1})\mathbf {q} ={\vec {v}}}
2つの回転四元数は、次の関係によって1つの同等の四元数に結合することができます。
q ′ = q 2 q 1 {\displaystyle \mathbf {q} '=\mathbf {q} _{2}\mathbf {q} _{1}} ここで、 q ′ は 、回転 q 1 に続いて回転 q 2 に対応します。したがって、任意の数の回転を組み合わせて、1つの回転として適用できます。(四元数の乗算は 可換で はないことに注意してください。)
共役演算の例 最初の対角線 の周りの120°の回転は 、 i 、 j 、 k を 巡回的に 入れ替えます pを q で 共役することは、 p ↦ qpq −1 という演算を指します
軸の周りの 回転 f を考えます。回転角は120°、つまり v → = i + j + k {\displaystyle {\vec {v}}=\mathbf {i} +\mathbf {j} +\mathbf {k} } 2π / 3 ラジアンです 。
α = 2 π 3 {\displaystyle \alpha ={\frac {2\pi }{3}}} p ↦ q p の場合、 q = 1 + i + j + k / 2 単位 3次元球面 上では、この片側(つまり 左 )の乗算は、四元数の60°回転となります。 の長さは √3 、 半角は v → {\displaystyle {\vec {v}}} π / 3 (60°)で、 コサインは 1 / 2 、( cos 60° = 0.5 )、 サインは / 2 、 ( sin 60 ° ≈ 0.866 )です。したがって、単位四元数による共役を扱っています。
u = cos α 2 + sin α 2 ⋅ 1 ‖ v → ‖ v → = cos π 3 + sin π 3 ⋅ 1 3 v → = 1 2 + 3 2 ⋅ 1 3 v → = 1 2 + 3 2 ⋅ i + j + k 3 = 1 + i + j + k 2 {\displaystyle {\begin{aligned}u&=\cos {\frac {\alpha }{2}}+\sin {\frac {\alpha }{2}}\cdot {\frac {1}{\|{\vec {v}}\|}}{\vec {v}}\\&=\cos {\frac {\pi }{3}}+\sin {\frac {\pi }{3}}\cdot {\frac {1}{\sqrt {3}}}{\vec {v}}\\&={\frac {1}{2}}+{\frac {\sqrt {3}}{2}}\cdot {\frac {1}{\sqrt {3}}}{\vec {v}}\\&={\frac {1}{2}}+{\frac {\sqrt {3}}{2}}\cdot {\frac {\mathbf {i} +\mathbf {j} +\mathbf {k} }{\sqrt {3}}}\\&={\frac {1+\mathbf {i} +\mathbf {j} +\mathbf {k} }{2}}\end{aligned}}} f が回転関数の 場合、
f ( a i + b j + c k ) = u ( a i + b j + c k ) u − 1 {\displaystyle f(a\mathbf {i} +b\mathbf {j} +c\mathbf {k} )=u(a\mathbf {i} +b\mathbf {j} +c\mathbf {k} )u^{-1}} 単位四元数の逆行列は、虚数成分の符号を変える だけで得られることが証明できます 。結果として、
u − 1 = 1 − i − j − k 2 {\displaystyle u^{-1}={\dfrac {1-\mathbf {i} -\mathbf {j} -\mathbf {k} }{2}}} そして
f ( a i + b j + c k ) = 1 + i + j + k 2 ( a i + b j + c k ) 1 − i − j − k 2 {\displaystyle f(a\mathbf {i} +b\mathbf {j} +c\mathbf {k} )={\dfrac {1+\mathbf {i} +\mathbf {j} +\mathbf {k} }{2}}(a\mathbf {i} +b\mathbf {j} +c\mathbf {k} ){\dfrac {1-\mathbf {i} -\mathbf {j} -\mathbf {k} }{2}}} これは、四元数演算の通常の規則を用いて、次のように簡略化できます。
f ( a i + b j + c k ) = c i + a j + b k {\displaystyle f(a\mathbf {i} +b\mathbf {j} +c\mathbf {k} )=c\mathbf {i} +a\mathbf {j} +b\mathbf {k} } 予想通り、回転は 立方体を1点に固定し、その固定点を通る長対角線を中心に120°回転させることに相当します(3つの軸が 周期的に入れ替わって いることに注意してください )。
四元数から導出される回転行列 四元数回転 ( )は、代数的に 行列回転 に操作できます 。ここで、は 回転行列 であり 、次のように 与えられます。 [10] p ′ = q p q − 1 {\displaystyle \mathbf {p'} =\mathbf {q} \mathbf {p} \mathbf {q} ^{-1}} q = q r + q i i + q j j + q k k {\displaystyle \mathbf {q} =q_{r}+q_{i}\mathbf {i} +q_{j}\mathbf {j} +q_{k}\mathbf {k} } p ′ = R p {\displaystyle \mathbf {p'} =\mathbf {Rp} } R {\displaystyle \mathbf {R} }
R = [ 1 − 2 s ( q j 2 + q k 2 ) 2 s ( q i q j − q k q r ) 2 s ( q i q k + q j q r ) 2 s ( q i q j + q k q r ) 1 − 2 s ( q i 2 + q k 2 ) 2 s ( q j q k − q i q r ) 2 s ( q i q k − q j q r ) 2 s ( q j q k + q i q r ) 1 − 2 s ( q i 2 + q j 2 ) ] {\displaystyle \mathbf {R} ={\begin{bmatrix}1-2s(q_{j}^{2}+q_{k}^{2})&2s(q_{i}q_{j}-q_{k}q_{r})&2s(q_{i}q_{k}+q_{j}q_{r})\\2s(q_{i}q_{j}+q_{k}q_{r})&1-2s(q_{i}^{2}+q_{k}^{2})&2s(q_{j}q_{k}-q_{i}q_{r})\\2s(q_{i}q_{k}-q_{j}q_{r})&2s(q_{j}q_{k}+q_{i}q_{r})&1-2s(q_{i}^{2}+q_{j}^{2})\end{bmatrix}}} ここで 、 が 単位四元数である場合 、 です。 s = ‖ q ‖ − 2 {\displaystyle s=\|q\|^{-2}} s = 1 − 2 = 1 {\displaystyle s=1^{-2}=1}
と を スカラー部分とベクトル部分 として 表し 、式 の乗算演算の公式を使用すれば、 ベクトル 解析 と線形代数を用いてこれを得ることができます。 を 、 を、 と 書き 、 と すると 、式は になります 。スカラー部分とベクトル部分として表される2つの四元数の乗算の公式を使用すると、 p {\displaystyle \mathbf {p} } q {\displaystyle \mathbf {q} } p ′ = q p q − 1 {\displaystyle \mathbf {p'} =\mathbf {q} \mathbf {p} \mathbf {q} ^{-1}} p {\displaystyle \mathbf {p} } ( 0 , p ) {\displaystyle \left(0,\ \mathbf {p} \right)} p ′ {\displaystyle \mathbf {p} '} ( 0 , p ′ ) {\displaystyle \left(0,\ \mathbf {p} '\right)} q {\displaystyle \mathbf {q} } ( q r , v ) {\displaystyle \left(q_{r},\ \mathbf {v} \right)} v = ( q i , q j , q k ) {\displaystyle \mathbf {v} =\left(q_{i},q_{j},q_{k}\right)} ( 0 , p ′ ) = ( q r , v ) ( 0 , p ) s ( q r , − v ) {\displaystyle \left(0,\ \mathbf {p} '\right)=\left(q_{r},\ \mathbf {v} \right)\left(0,\ \mathbf {p} \right)s\left(q_{r},\ -\mathbf {v} \right)}
( r 1 , v → 1 ) ( r 2 , v → 2 ) = ( r 1 r 2 − v → 1 ⋅ v → 2 , r 1 v → 2 + r 2 v → 1 + v → 1 × v → 2 ) , {\displaystyle \left(r_{1},\ {\vec {v}}_{1}\right)\left(r_{2},\ {\vec {v}}_{2}\right)=\left(r_{1}r_{2}-{\vec {v}}_{1}\cdot {\vec {v}}_{2},\ r_{1}{\vec {v}}_{2}+r_{2}{\vec {v}}_{1}+{\vec {v}}_{1}\times {\vec {v}}_{2}\right),} この式は と書き直すことができます。
( 0 , p ′ ) = ( ( q r , v ) ( 0 , p ) ) s ( q r , − v ) = ( q r 0 − v ⋅ p , q r p + 0 v + v × p ) s ( q r , − v ) = s ( − v ⋅ p , q r p + v × p ) ( q r , − v ) = s ( − v ⋅ p q r − ( q r p + v × p ) ⋅ ( − v ) , ( − v ⋅ p ) ( − v ) + q r ( q r p + v × p ) + ( q r p + v × p ) × ( − v ) ) = s ( − v ⋅ p q r + q r v ⋅ p , v ( v ⋅ p ) + q r 2 p + q r v × p + v × ( q r p + v × p ) ) = ( 0 , s ( v ⊗ v + q r 2 I + 2 q r [ v ] × + [ v ] × 2 ) p ) , {\displaystyle {\begin{aligned}(0,\ \mathbf {p} ')=&((q_{r},\ \mathbf {v} )(0,\ \mathbf {p} ))s(q_{r},\ -\mathbf {v} )\\=&(q_{r}0-\mathbf {v} \cdot \mathbf {p} ,\ q_{r}\mathbf {p} +0\mathbf {v} +\mathbf {v} \times \mathbf {p} )s(q_{r},\ -\mathbf {v} )\\=&s(-\mathbf {v} \cdot \mathbf {p} ,\ q_{r}\mathbf {p} +\mathbf {v} \times \mathbf {p} )(q_{r},\ -\mathbf {v} )\\=&s(-\mathbf {v} \cdot \mathbf {p} q_{r}-(q_{r}\mathbf {p} +\mathbf {v} \times \mathbf {p} )\cdot (-\mathbf {v} ),\ (-\mathbf {v} \cdot \mathbf {p} )(-\mathbf {v} )+q_{r}(q_{r}\mathbf {p} +\mathbf {v} \times \mathbf {p} )+(q_{r}\mathbf {p} +\mathbf {v} \times \mathbf {p} )\times (-\mathbf {v} ))\\=&s\left(-\mathbf {v} \cdot \mathbf {p} q_{r}+q_{r}\mathbf {v} \cdot \mathbf {p} ,\ \mathbf {v} \left(\mathbf {v} \cdot \mathbf {p} \right)+q_{r}^{2}\mathbf {p} +q_{r}\mathbf {v} \times \mathbf {p} +\mathbf {v} \times \left(q_{r}\mathbf {p} +\mathbf {v} \times \mathbf {p} \right)\right)\\=&\left(0,\ s\left(\mathbf {v} \otimes \mathbf {v} +q_{r}^{2}\mathbf {I} +2q_{r}[\mathbf {v} ]_{\times }+[\mathbf {v} ]_{\times }^{2}\right)\mathbf {p} \right),\end{aligned}}} は 外積 、 は 単位行列 、 は ベクトルを右から乗算すると 外積 を 与える変換行列です 。 ⊗ {\displaystyle \otimes } I {\displaystyle \mathbf {I} } [ v ] × {\displaystyle [\mathbf {v} ]_{\times }} u {\displaystyle \mathbf {u} } v × u {\displaystyle \mathbf {v} \times \mathbf {u} }
なので、 を として 識別でき 、これを展開すると上記の行列形式で書かれた式になります。 p ′ = R p {\displaystyle \mathbf {p} '=\mathbf {R} \mathbf {p} } R {\displaystyle \mathbf {R} } s ( v ⊗ v + q r 2 I + 2 q r [ v ] × + [ v ] × 2 ) {\displaystyle s\left(\mathbf {v} \otimes \mathbf {v} +q_{r}^{2}\mathbf {I} +2q_{r}[\mathbf {v} ]_{\times }+[\mathbf {v} ]_{\times }^{2}\right)}
軸-角度表現の復元 この式は 、ベクトル で与えられた軸を中心に 、任意の ベクトル四元数 を角度 だけ回転させます 。
ここで 、 は四元数 に依存します。 q p q − 1 {\displaystyle \mathbf {q} \mathbf {p} \mathbf {q} ^{-1}} p {\displaystyle \mathbf {p} } a {\displaystyle \mathbf {a} } θ {\displaystyle \theta } a {\displaystyle \mathbf {a} } θ {\displaystyle \theta } q = q r + q i i + q j j + q k k {\displaystyle \mathbf {q} =q_{r}+q_{i}\mathbf {i} +q_{j}\mathbf {j} +q_{k}\mathbf {k} }
a {\displaystyle \mathbf {a} } は 次の式から求められます。 θ {\displaystyle \theta }
( a x , a y , a z ) = ( q i , q j , q k ) q i 2 + q j 2 + q k 2 θ = 2 atan2 ( q i 2 + q j 2 + q k 2 , q r ) , {\displaystyle {\begin{aligned}(a_{x},a_{y},a_{z})={}&{\frac {(q_{i},q_{j},q_{k})}{\sqrt {q_{i}^{2}+q_{j}^{2}+q_{k}^{2}}}}\\[2pt]\theta =2\operatorname {atan2} &\left({\sqrt {q_{i}^{2}+q_{j}^{2}+q_{k}^{2}}},\,q_{r}\right),\end{aligned}}} ここで、 は 2つの引数 を持つ逆正接 です。は機能しますが、 有限精度の数に対して の 近くでは数値的に不安定(不正確)です。 atan2 {\displaystyle \operatorname {atan2} } θ = 2 acos ( q r ) {\displaystyle \theta =2\operatorname {acos} (q_{r})} q r = ± 1 {\displaystyle q_{r}=\pm 1}
四元数がスカラーに近づく場合、 退化 により 恒等回転の軸が明確に定義されない
ため、 注意が必要です。
空間回転の合成 2つの回転R B と R A の合成を四元数で定式化する利点は、 合成回転 R C = R B R A の回転軸 と角度が直接得られること です
空間回転 R に関連付けられた四元数を、その 回転軸 S と、この軸の周りの 回転角から構築するとします。関連付けられた四元数は 次のように与えられます。回転 R B と R A の合成は、回転軸と角度が四元数の積で定義される 回転 R C = R B R A です。これは φ {\displaystyle \varphi } S = cos φ 2 + S sin φ 2 . {\displaystyle S=\cos {\frac {\varphi }{2}}+\mathbf {S} \sin {\frac {\varphi }{2}}.} A = cos α 2 + A sin α 2 and B = cos β 2 + B sin β 2 , {\displaystyle A=\cos {\frac {\alpha }{2}}+\mathbf {A} \sin {\frac {\alpha }{2}}\quad {\text{and}}\quad B=\cos {\frac {\beta }{2}}+\mathbf {B} \sin {\frac {\beta }{2}},} C = cos γ 2 + C sin γ 2 = ( cos β 2 + B sin β 2 ) ( cos α 2 + A sin α 2 ) . {\displaystyle C=\cos {\frac {\gamma }{2}}+\mathbf {C} \sin {\frac {\gamma }{2}}=\left(\cos {\frac {\beta }{2}}+\mathbf {B} \sin {\frac {\beta }{2}}\right)\left(\cos {\frac {\alpha }{2}}+\mathbf {A} \sin {\frac {\alpha }{2}}\right).}
この積を展開して cos γ 2 + C sin γ 2 = ( cos β 2 cos α 2 − B ⋅ A sin β 2 sin α 2 ) + ( B sin β 2 cos α 2 + A sin α 2 cos β 2 + B × A sin β 2 sin α 2 ) . {\displaystyle \cos {\frac {\gamma }{2}}+\mathbf {C} \sin {\frac {\gamma }{2}}=\left(\cos {\frac {\beta }{2}}\cos {\frac {\alpha }{2}}-\mathbf {B} \cdot \mathbf {A} \sin {\frac {\beta }{2}}\sin {\frac {\alpha }{2}}\right)+\left(\mathbf {B} \sin {\frac {\beta }{2}}\cos {\frac {\alpha }{2}}+\mathbf {A} \sin {\frac {\alpha }{2}}\cos {\frac {\beta }{2}}+\mathbf {B} \times \mathbf {A} \sin {\frac {\beta }{2}}\sin {\frac {\alpha }{2}}\right).}
この式の両辺を 球面上の余弦定理 である恒等式で割り、 計算します。 cos γ 2 = cos β 2 cos α 2 − B ⋅ A sin β 2 sin α 2 , {\displaystyle \cos {\frac {\gamma }{2}}=\cos {\frac {\beta }{2}}\cos {\frac {\alpha }{2}}-\mathbf {B} \cdot \mathbf {A} \sin {\frac {\beta }{2}}\sin {\frac {\alpha }{2}},} C tan γ 2 = B tan β 2 + A tan α 2 + B × A tan β 2 tan α 2 1 − B ⋅ A tan β 2 tan α 2 . {\displaystyle \mathbf {C} \tan {\frac {\gamma }{2}}={\frac {\mathbf {B} \tan {\frac {\beta }{2}}+\mathbf {A} \tan {\frac {\alpha }{2}}+\mathbf {B} \times \mathbf {A} \tan {\frac {\beta }{2}}\tan {\frac {\alpha }{2}}}{1-\mathbf {B} \cdot \mathbf {A} \tan {\frac {\beta }{2}}\tan {\frac {\alpha }{2}}}}.}
これは、 2つの回転の軸で定義される合成回転の軸に関するロドリゲス の公式です。彼はこの公式を1840年に導きました(408ページ参照)。 [11]
3つの回転軸 A 、 B 、 C は球面三角形を形成し、この三角形の辺によって形成される平面間の二面角は回転角によって定義されます。ハミルトン [12]はこれらの方程式の成分形式を提示し、四元数積は与えられた2つの頂点とそれらに関連する弧長から球面三角形の3番目の頂点を計算し、これは楕円幾何 学 における点の代数も定義することを示しました 。
軸と角度の合成 正規化された回転軸は、 展開された積からを除去すると、回転軸であるベクトルに定数を乗じたものが残ります。軸ベクトルが または ベクトル が に近い場合、つまり任意の軸 の周りの回転が0である場合、軸ベクトルを正規化する際には注意が必要です。これは恒等回転、または任意の軸の周りの回転です。 cos γ 2 {\textstyle \cos {\frac {\gamma }{2}}} γ {\displaystyle \gamma } 0 {\displaystyle 0} k 2 π {\displaystyle k2\pi } 0 {\displaystyle 0}
γ = 2 cos − 1 ( cos β 2 cos α 2 − B ⋅ A sin β 2 sin α 2 ) D = B sin β 2 cos α 2 + A sin α 2 cos β 2 + B × A sin β 2 sin α 2 {\displaystyle {\begin{aligned}\gamma &=2\cos ^{-1}\left(\cos {\frac {\beta }{2}}\cos {\frac {\alpha }{2}}-\mathbf {B} \cdot \mathbf {A} \sin {\frac {\beta }{2}}\sin {\frac {\alpha }{2}}\right)\\\mathbf {D} &=\mathbf {B} \sin {\frac {\beta }{2}}\cos {\frac {\alpha }{2}}+\mathbf {A} \sin {\frac {\alpha }{2}}\cos {\frac {\beta }{2}}+\mathbf {B} \times \mathbf {A} \sin {\frac {\beta }{2}}\sin {\frac {\alpha }{2}}\end{aligned}}}
または角度の加算と 三角関数の置換 で… γ = 2 cos − 1 ( ( 1 − A ⋅ B ) cos β − α 2 + ( 1 + A ⋅ B ) cos β + α 2 ) D = ( sin β + α 2 + sin β − α 2 ) A + ( sin β + α 2 − sin β − α 2 ) B + ( cos β − α 2 − cos β + α 2 ) B × A {\displaystyle {\begin{aligned}\gamma &=2\cos ^{-1}\left(\left(1-\mathbf {A} \cdot \mathbf {B} \right)\cos {\frac {\beta -\alpha }{2}}+\left(1+\mathbf {A} \cdot \mathbf {B} \right)\cos {\frac {\beta +\alpha }{2}}\right)\\\mathbf {D} &=\left(\sin {\frac {\beta +\alpha }{2}}+\sin {\frac {\beta -\alpha }{2}}\right)\mathbf {A} +\left(\sin {\frac {\beta +\alpha }{2}}-\sin {\frac {\beta -\alpha }{2}}\right)\mathbf {B} +\left(\cos {\frac {\beta -\alpha }{2}}-\cos {\frac {\beta +\alpha }{2}}\right)\mathbf {B} \times \mathbf {A} \end{aligned}}}
最後に回転軸を正規化すると: または D 2 sin 1 2 γ {\textstyle {\frac {\mathbf {D} }{2\sin {\frac {1}{2}}\gamma }}} D ‖ D ‖ {\textstyle {\frac {\mathbf {D} }{\|\mathbf {D} \|}}}
回転四元数に関する微分 回転を数値最適化から推定する場合、 回転四元数 p' = q p q −1は回転四元数 q に関して微分する必要があります。回転角度の推定は、3Dオブジェクトのレジストレーションやカメラキャリブレーションにおいて不可欠な手順です。ユニタリ q と純虚数 p の場合、つまり3D空間での回転の場合、回転四元数の微分は 行列計算 表記法を用いて次のように
表すことができます。
∂ p ′ ∂ q ≡ [ ∂ p ′ ∂ q 0 , ∂ p ′ ∂ q x , ∂ p ′ ∂ q y , ∂ p ′ ∂ q z ] = [ q p − ( q p ) ∗ , ( q p i ) ∗ − q p i , ( q p j ) ∗ − q p j , ( q p k ) ∗ − q p k ] . {\displaystyle {\begin{aligned}{\frac {\partial \mathbf {p'} }{\partial \mathbf {q} }}\equiv \left[{\frac {\partial \mathbf {p'} }{\partial q_{0}}},{\frac {\partial \mathbf {p'} }{\partial q_{x}}},{\frac {\partial \mathbf {p'} }{\partial q_{y}}},{\frac {\partial \mathbf {p'} }{\partial q_{z}}}\right]=\left[\mathbf {qp} -(\mathbf {qp} )^{*},(\mathbf {qpi} )^{*}-\mathbf {qpi} ,(\mathbf {qpj} )^{*}-\mathbf {qpj} ,(\mathbf {qpk} )^{*}-\mathbf {qpk} \right].\end{aligned}}} 導出は[13] にあります。
背景
四元数 複素数 は、 通常の代数規則に加えて i 2 = −1という 規則を満たす抽象記号 i を導入することで定義できます。これは、複素数演算のすべての規則を再現するのに十分です。例えば:
( a + b i ) ( c + d i ) = a c + a d i + b i c + b i d i = a c + a d i + b c i + b d i 2 = ( a c − b d ) + ( b c + a d ) i . {\displaystyle (a+b\mathbf {i} )(c+d\mathbf {i} )=ac+ad\mathbf {i} +b\mathbf {i} c+b\mathbf {i} d\mathbf {i} =ac+ad\mathbf {i} +bc\mathbf {i} +bd\mathbf {i} ^{2}=(ac-bd)+(bc+ad)\mathbf {i} .} 同様に、四元数は 、 i 2 = j 2 = k 2 = i j k = −1という規則と、 乗法の交換法則 ( このような非可換乗算のよく知られた例は 行列乗算です) を除く 通常の代数規則を満たす抽象 記号 i 、 j 、 kを導入することで定義できます。これにより、四元数 基底元の 乗算に関する規則など、四元数演算のすべての規則が導かれます 。これらの規則を用いて、次のことを示すことができます
( a + b i + c j + d k ) ( e + f i + g j + h k ) = ( a e − b f − c g − d h ) + ( a f + b e + c h − d g ) i + ( a g − b h + c e + d f ) j + ( a h + b g − c f + d e ) k . {\displaystyle {\begin{aligned}&(a+b\mathbf {i} +c\mathbf {j} +d\mathbf {k} )(e+f\mathbf {i} +g\mathbf {j} +h\mathbf {k} )=\\&(ae-bf-cg-dh)+(af+be+ch-dg)\mathbf {i} +(ag-bh+ce+df)\mathbf {j} +(ah+bg-cf+de)\mathbf {k} .\end{aligned}}} 四元数の虚数部は 3次元 ベクトル空間 ではベクトルのように振る舞い 、実数部は R では スカラー のように振る舞います 。四元数を幾何学で使用する場合、 スカラーとベクトルの組み合わせ として定義する方が便利です 。 b i + c j + d k {\displaystyle b\mathbf {i} +c\mathbf {j} +d\mathbf {k} } v → = ( b , c , d ) {\displaystyle {\vec {v}}=(b,c,d)}
a + b i + c j + d k = a + v → . {\displaystyle a+b\mathbf {i} +c\mathbf {j} +d\mathbf {k} =a+{\vec {v}}.} ベクトルは非常に異なる性質を持つオブジェクトであるため、数値を ベクトル に 加え たり、 2つのベクトル を掛け合わせ たりするのは奇妙に感じる人もいるかもしれません。この演算は通常定義されていないためです。しかし、これは四元数の実数部と虚数部の単なる表記法であることを覚えておけば、より正当なものになります。言い換えれば、正しい推論は、ベクトル/虚数部がゼロの四元数と、スカラー/実数部がゼロの四元数を2つ加えることです
q 1 = s + v → = ( s , 0 → ) + ( 0 , v → ) . {\displaystyle q_{1}=s+{\vec {v}}=\left(s,{\vec {0}}\right)+\left(0,{\vec {v}}\right).} 四元数の乗算は、ベクトルのクロス積 と ドット積 という現代的な言語で表現できます (これらはそもそも四元数にヒントを得たものです [14] )。ベクトル/虚数部を乗算する場合、 i 2 = j 2 = k 2 = ijk = −1 という規則の代わりに 、四元数の乗算規則を使用します。
v → w → = − v → ⋅ w → + v → × w → , {\displaystyle {\vec {v}}{\vec {w}}=-{\vec {v}}\cdot {\vec {w}}+{\vec {v}}\times {\vec {w}},} ここで、
v → w → {\displaystyle {\vec {v}}{\vec {w}}} は結果として得られる四元数、 v → × w → {\displaystyle {\vec {v}}\times {\vec {w}}} はベクトルのクロス積(ベクトル)、 v → ⋅ w → {\displaystyle {\vec {v}}\cdot {\vec {w}}} はベクトルのスカラー積(スカラー)です 四元数の乗算は非可換です(外積がと反可換で あるため )。一方、スカラー-スカラー乗算とスカラー-ベクトル乗算は可換です。これらの規則から、次の式が直ちに導かれます( 四元数 § 四元数と3次元幾何学 を 参照)。
q 1 q 2 = ( s + v → ) ( t + w → ) = ( s t − v → ⋅ w → ) + ( s w → + t v → + v → × w → ) . {\displaystyle q_{1}q_{2}=\left(s+{\vec {v}}\right)\left(t+{\vec {w}}\right)=\left(st-{\vec {v}}\cdot {\vec {w}}\right)+\left(s{\vec {w}}+t{\vec {v}}+{\vec {v}}\times {\vec {w}}\right).} 非零四元数の(左と右の)逆数は、共役ノルム比で与えられます( 詳細を参照 )。
q 1 − 1 = ( s + v → ) − 1 = ( s + v → ) ∗ ‖ s + v → ‖ 2 = s − v → s 2 + ‖ v → ‖ 2 , {\displaystyle q_{1}^{-1}=\left(s+{\vec {v}}\right)^{-1}={\frac {\left(s+{\vec {v}}\right)^{*}}{\lVert s+{\vec {v}}\rVert ^{2}}}={\frac {s-{\vec {v}}}{s^{2}+\lVert {\vec {v}}\rVert ^{2}}},} は直接計算で確認できます( 複素数の逆数 との類似性に注意)。
回転恒等式 を単位ベクトル(回転軸)とし、 とします 。 目標は、 u → {\displaystyle {\vec {u}}} q = cos α 2 + u → sin α 2 {\displaystyle q=\cos {\frac {\alpha }{2}}+{\vec {u}}\sin {\frac {\alpha }{2}}}
v → ′ = q v → q − 1 = ( cos α 2 + u → sin α 2 ) v → ( cos α 2 − u → sin α 2 ) {\displaystyle {\vec {v}}'=q{\vec {v}}q^{-1}=\left(\cos {\frac {\alpha }{2}}+{\vec {u}}\sin {\frac {\alpha }{2}}\right)\,{\vec {v}}\,\left(\cos {\frac {\alpha }{2}}-{\vec {u}}\sin {\frac {\alpha }{2}}\right)} は軸 を中心に 角度 回転した ベクトルを生成します 。展開すると( を念頭に置いて )、 v → {\displaystyle {\vec {v}}} α {\displaystyle \alpha } u → {\displaystyle {\vec {u}}} u → v → = u → × v → − u → ⋅ v → {\displaystyle {\vec {u}}{\vec {v}}={\vec {u}}\times {\vec {v}}-{\vec {u}}\cdot {\vec {v}}}
v → ′ = v → cos 2 α 2 + ( u → v → − v → u → ) sin α 2 cos α 2 − u → v → u → sin 2 α 2 = v → cos 2 α 2 + 2 ( u → × v → ) sin α 2 cos α 2 − ( ( u → × v → ) − ( u → ⋅ v → ) ) u → sin 2 α 2 = v → cos 2 α 2 + 2 ( u → × v → ) sin α 2 cos α 2 − ( ( u → × v → ) u → − ( u → ⋅ v → ) u → ) sin 2 α 2 = v → cos 2 α 2 + 2 ( u → × v → ) sin α 2 cos α 2 − ( ( ( u → × v → ) × u → − ( u → × v → ) ⋅ u → ) − ( u → ⋅ v → ) u → ) sin 2 α 2 = v → cos 2 α 2 + 2 ( u → × v → ) sin α 2 cos α 2 − ( ( v → − ( u → ⋅ v → ) u → ) − 0 − ( u → ⋅ v → ) u → ) sin 2 α 2 = v → cos 2 α 2 + 2 ( u → × v → ) sin α 2 cos α 2 − ( v → − 2 u → ( u → ⋅ v → ) ) sin 2 α 2 = v → cos 2 α 2 + 2 ( u → × v → ) sin α 2 cos α 2 + ( 2 u → ( u → ⋅ v → ) − v → ) sin 2 α 2 {\displaystyle {\begin{aligned}{\vec {v}}'&={\vec {v}}\cos ^{2}{\frac {\alpha }{2}}+\left({\vec {u}}{\vec {v}}-{\vec {v}}{\vec {u}}\right)\sin {\frac {\alpha }{2}}\cos {\frac {\alpha }{2}}-{\vec {u}}{\vec {v}}{\vec {u}}\sin ^{2}{\frac {\alpha }{2}}\\[6pt]&={\vec {v}}\cos ^{2}{\frac {\alpha }{2}}+2\left({\vec {u}}\times {\vec {v}}\right)\sin {\frac {\alpha }{2}}\cos {\frac {\alpha }{2}}-\left(\left({\vec {u}}\times {\vec {v}}\right)-\left({\vec {u}}\cdot {\vec {v}}\right)\right){\vec {u}}\sin ^{2}{\frac {\alpha }{2}}\\[6pt]&={\vec {v}}\cos ^{2}{\frac {\alpha }{2}}+2\left({\vec {u}}\times {\vec {v}}\right)\sin {\frac {\alpha }{2}}\cos {\frac {\alpha }{2}}-\left(\left({\vec {u}}\times {\vec {v}}\right){\vec {u}}-\left({\vec {u}}\cdot {\vec {v}}\right){\vec {u}}\right)\sin ^{2}{\frac {\alpha }{2}}\\[6pt]&={\vec {v}}\cos ^{2}{\frac {\alpha }{2}}+2\left({\vec {u}}\times {\vec {v}}\right)\sin {\frac {\alpha }{2}}\cos {\frac {\alpha }{2}}-\left(\left(\left({\vec {u}}\times {\vec {v}}\right)\times {\vec {u}}-\left({\vec {u}}\times {\vec {v}}\right)\cdot {\vec {u}}\right)-\left({\vec {u}}\cdot {\vec {v}}\right){\vec {u}}\right)\sin ^{2}{\frac {\alpha }{2}}\\[6pt]&={\vec {v}}\cos ^{2}{\frac {\alpha }{2}}+2\left({\vec {u}}\times {\vec {v}}\right)\sin {\frac {\alpha }{2}}\cos {\frac {\alpha }{2}}-\left(\left({\vec {v}}-\left({\vec {u}}\cdot {\vec {v}}\right){\vec {u}}\right)-0-\left({\vec {u}}\cdot {\vec {v}}\right){\vec {u}}\right)\sin ^{2}{\frac {\alpha }{2}}\\[6pt]&={\vec {v}}\cos ^{2}{\frac {\alpha }{2}}+2\left({\vec {u}}\times {\vec {v}}\right)\sin {\frac {\alpha }{2}}\cos {\frac {\alpha }{2}}-\left({\vec {v}}-2{\vec {u}}\left({\vec {u}}\cdot {\vec {v}}\right)\right)\sin ^{2}{\frac {\alpha }{2}}\\[6pt]&={\vec {v}}\cos ^{2}{\frac {\alpha }{2}}+2\left({\vec {u}}\times {\vec {v}}\right)\sin {\frac {\alpha }{2}}\cos {\frac {\alpha }{2}}+\left(2{\vec {u}}\left({\vec {u}}\cdot {\vec {v}}\right)-{\vec {v}}\right)\sin ^{2}{\frac {\alpha }{2}}\\[6pt]\end{aligned}}} と をそれぞれに垂直な と に平行な の成分と 等しく すると 、 と となり、 v → ⊥ {\displaystyle {\vec {v}}_{\bot }} v → ‖ {\displaystyle {\vec {v}}_{\|}} v → {\displaystyle {\vec {v}}} u → {\displaystyle {\vec {u}}} v → = v → ⊥ + v → ‖ {\displaystyle {\vec {v}}={\vec {v}}_{\bot }+{\vec {v}}_{\|}} u → ( u → ⋅ v → ) = v → ‖ {\displaystyle {\vec {u}}\left({\vec {u}}\cdot {\vec {v}}\right)={\vec {v}}_{\|}}
v → ′ = v → cos 2 α 2 + 2 ( u → × v → ) sin α 2 cos α 2 + ( 2 u → ( u → ⋅ v → ) − v → ) sin 2 α 2 = ( v → ‖ + v → ⊥ ) cos 2 α 2 + 2 ( u → × v → ) sin α 2 cos α 2 + ( v → ‖ − v → ⊥ ) sin 2 α 2 = v → ‖ ( cos 2 α 2 + sin 2 α 2 ) + ( u → × v → ) ( 2 sin α 2 cos α 2 ) + v → ⊥ ( cos 2 α 2 − sin 2 α 2 ) {\displaystyle {\begin{aligned}{\vec {v}}'&={\vec {v}}\cos ^{2}{\frac {\alpha }{2}}+2\left({\vec {u}}\times {\vec {v}}\right)\sin {\frac {\alpha }{2}}\cos {\frac {\alpha }{2}}+\left(2{\vec {u}}\left({\vec {u}}\cdot {\vec {v}}\right)-{\vec {v}}\right)\sin ^{2}{\frac {\alpha }{2}}\\[6pt]&=\left({\vec {v}}_{\|}+{\vec {v}}_{\bot }\right)\cos ^{2}{\frac {\alpha }{2}}+2\left({\vec {u}}\times {\vec {v}}\right)\sin {\frac {\alpha }{2}}\cos {\frac {\alpha }{2}}+\left({\vec {v}}_{\|}-{\vec {v}}_{\bot }\right)\sin ^{2}{\frac {\alpha }{2}}\\[6pt]&={\vec {v}}_{\|}\left(\cos ^{2}{\frac {\alpha }{2}}+\sin ^{2}{\frac {\alpha }{2}}\right)+\left({\vec {u}}\times {\vec {v}}\right)\left(2\sin {\frac {\alpha }{2}}\cos {\frac {\alpha }{2}}\right)+{\vec {v}}_{\bot }\left(\cos ^{2}{\frac {\alpha }{2}}-\sin ^{2}{\frac {\alpha }{2}}\right)\\[6pt]\end{aligned}}} 三角関数のピタゴラス等式と倍角恒等式 を用いると 、
v → ′ = v → ‖ ( cos 2 α 2 + sin 2 α 2 ) + ( u → × v → ) ( 2 sin α 2 cos α 2 ) + v → ⊥ ( cos 2 α 2 − sin 2 α 2 ) = v → ‖ + ( u → × v → ) sin α + v → ⊥ cos α {\displaystyle {\begin{aligned}{\vec {v}}'&={\vec {v}}_{\|}\left(\cos ^{2}{\frac {\alpha }{2}}+\sin ^{2}{\frac {\alpha }{2}}\right)+\left({\vec {u}}\times {\vec {v}}\right)\left(2\sin {\frac {\alpha }{2}}\cos {\frac {\alpha }{2}}\right)+{\vec {v}}_{\bot }\left(\cos ^{2}{\frac {\alpha }{2}}-\sin ^{2}{\frac {\alpha }{2}}\right)\\[6pt]&={\vec {v}}_{\|}+\left({\vec {u}}\times {\vec {v}}\right)\sin \alpha +{\vec {v}}_{\bot }\cos \alpha \end{aligned}}} これは u → 軸 の周り の 回転の式です。 α {\displaystyle \alpha }
四元数の回転演算 このセクションで使用されている特性の非常に形式的な説明は、Altman [15]によって与えられています。
回転の超球面
回転空間の視覚化 単位四元数は、 ユークリッド 回転の 群を 3次元 で 非常にわかりやすい方法で表します。回転と四元数の対応は、まず回転空間自体を視覚化することで理解できます。
回転空間における、角度と軸の両方が異なる2つの別々の回転。ここで、各軸ベクトルの長さは、その軸の周りの回転のそれぞれの大きさに相対的です 回転空間を視覚化するには、より単純なケースを考えるのが分かりやすい。3次元におけるあらゆる回転は、 ある 軸を中心としたある 角度の回転で記述できる。ここでは、角度の 向きを 定めるために軸 ベクトル を用いる 。回転軸が xy平面にある特殊なケースを考えてみよう。この場合、これらの回転の軸を、ベクトルが交差する円上の点によって指定し、円の半径を選択して 回転角度 を表すことができる 。
同様に、回転軸がxy 平面にある回転は、 3次元内の 固定 半径 の球面上の点として記述できます 。3 次元空間の球面の北極から開始し、北極の点を恒等回転(角度 0 の回転)として指定します。恒等回転の場合と同様に、回転軸は定義されず、回転角度(ゼロ)は無関係です。回転角度が非常に小さい回転は、球面を xy 平面 に平行で北極に非常に近いスライスに指定することで指定できます。このスライスによって定義される円は非常に小さくなり、回転角度が小さいことに対応します。回転角度が大きくなるにつれて、スライスは負の z方向に移動し、円は球面の赤道に達するまで大きくなります。赤道に達すると、回転角度は 180 度に相当します。南に向かって進むと、円の半径は小さくなります(回転角度の絶対値が 負の数 と見なされることに対応します )。最後に、南極に到達すると、円は再び縮小して恒等回転となり、これも南極の点として指定されます。
この視覚化によって、このような回転とその表現の多くの特徴がわかることに注意してください。回転空間は連続しており、各回転にはほぼ同じ回転の近傍があり、近傍が縮小するにつれてこの近傍は平坦になります。また、各回転は実際には球面上の2つの対蹠点によって表され、これらの点は球の中心を通る線の両端にあります。これは、各回転が何らかの軸を中心とした回転、または同等に、反対方向を指す軸を中心とした負の回転(いわゆる 二重被覆 )として表すことができるという事実を反映しています。特定の回転角度を表す円の「緯度」は、その回転によって表される角度の半分になります。これは、点が北極から南極に移動すると、緯度は0度から180度の範囲になりますが、回転角度は0度から360度の範囲になるためです(この場合 、 点の「経度」は特定の回転軸を表す。)ただし、この回転集合は合成に関して閉じていないことに注意されたい。xy平面に軸を持つ2つの連続する回転は、必ずしも xy 平面に軸を持つ回転を与えるとは限らず、したがって球面上の点として表すことはできない。これは、回転が合成に関して 閉集合 を形成する3次元空間における一般的な回転には当てはまらない 。
水平軸( xy 平面)を持つ回転の回転球面 。 この視覚化は、3次元空間における一般的な回転に拡張できます。恒等回転は点であり、ある軸を中心とした小さな回転角は、小さな半径を持つ球面上の点として表すことができます。回転角が大きくなるにつれて球面は大きくなり、回転角が180度に達すると球面は縮小し始め、角度が360度(または負の方向から0度)に近づくにつれて点になります。この拡大する球面と収縮する球面の集合は、 4次元空間 (3次元球面)における超球面を表します。上記のより単純な例と同様に、超球面上の点として表される各回転は、その超球面上の対蹠点と一致します超球面上の「緯度」は対応する回転角の半分となり、任意の点の近傍は、近傍が縮小するにつれて「平坦」になります(つまり、点の3次元ユークリッド空間で表現されます)。この挙動は単位四元数集合と一致します。一般四元数は4次元空間内の点を表しますが、単位の大きさに制約すると、超球面の面に相当する3次元空間が得られます。単位四元数の大きさは1で、単位半径の超球面に対応します。単位四元数のベクトル部分は、回転軸に対応する2次元球面の半径を表し、その大きさは回転角の半分の正弦です。各回転は、符号が反対の2つの単位四元数で表され、3次元の回転空間と同様に、2つの単位四元数の四元数積は単位四元数になります。また、単位四元数の空間は、与えられた単位四元数の任意の微小近傍において「平坦」です。
回転空間のパラメータ化 緯度と経度などの2つの座標で球面をパラメータ化できます。しかし、緯度と経度は、北極と南極では振る舞いが悪くなります( 毛玉定理 で説明されているように 退化します )。ただし、極は球上の他の点と本質的に異なるわけではありません。極(緯度+90°と-90°)では、経度は無意味になります
2 パラメータ座標系ではこのような退化を回避できないことが示されています。 このような問題は、球を 3 次元空間に埋め込み、3 つの直交座標 ( w 、 x 、 y ) でパラメータ化し、北極を ( w 、 x 、 y ) = (1、 0、 0) 、南極を ( w 、 x 、 y ) = (−1、 0、 0) 、赤道を w = 0 、 x 2 + y 2 = 1 に配置することで回避できます。 球上の点は制約 w 2 + x 2 + y 2 = 1 を満たすため、座標が 3 つあっても 自由度は 2 つだけです。 球上の点 ( w 、 x 、 y )は、通常の空間で、ベクトル ( x 、 y 、 0) の方向の水平軸の周りの角度 による 回転を表します 。 α = 2 cos − 1 w = 2 sin − 1 x 2 + y 2 {\displaystyle \alpha =2\cos ^{-1}w=2\sin ^{-1}{\sqrt {x^{2}+y^{2}}}}
同様に、3次元回転の超球面空間は3つの角度( オイラー角)でパラメータ化できますが、そのようなパラメータ化は超球面上のいくつかの点で退化し、 ジンバルロック の問題を引き起こします。これは、 w 2 + x 2 + y 2 + z 2 = 1 となる4つのユークリッド座標 w 、 x 、 y 、 z を使用することで回避できます 。点 ( w 、 x 、 y 、 z )は、ベクトル ( x 、 y 、 z ) が方向付ける軸の周りの 角度による回転を表します。 α = 2 cos − 1 w = 2 sin − 1 x 2 + y 2 + z 2 . {\displaystyle \alpha =2\cos ^{-1}w=2\sin ^{-1}{\sqrt {x^{2}+y^{2}+z^{2}}}.}
回転による四元数の特性の説明
非可換性 サイコロの非可換回転 四元数の乗算は 非可換で ある。この事実は、定義上 q q −1 = 1である p ↦ q p q −1 という式がどのようにして成り立つのかを説明できる 。単位四元数の乗算は三次元回転の合成に対応するため、三次元回転が一般に可換ではないことを示すことで、この性質を直感的に理解できる。
右の図はサイコロでこれを説明しています。右手で90度回転を2回行います。両方のサイコロは、最初は左上隅に示されているように配置されています(上面に1つの点)。経路Aは、 右手の法則を使用して -y 軸を中心とした回転から始まり、次に + z 軸を中心とした回転が続き 、左下隅に示されているように配置されます(上面に5つの点)。経路Bは回転の順序を逆にし、上部に3つの点が配置されます。
あるいは、2冊の本を並べて配置します。片方を z軸を中心に時計回りに90度回転させ、次に x 軸を中心に180度反転させます 。もう片方の本を、最初に x軸を中心に180度回転させ、次に z 軸を中心に時計回りに90度反転させます 。2冊の本は最終的に平行になりません。これは、一般に、2つの異なる空間軸を中心とした2つの異なる回転の合成は交換されないことを示しています。
方向 軸と角度の表現を定義するために使用されるベクトル外積は、空間に方向性(「利き手性」)を与えます 。3 次元 ベクトル 空間では、方程式 a × b = c の3つのベクトルは常に右手系の集合(または外積の定義方法に応じて左手系の集合)を形成し、ベクトル空間における方向性を固定します。あるいは、方向性への依存性は、 軸ベクトル に対する回転を指定するようなものを参照することで表現されます 。四元数形式では、空間の方向性の選択は乗算の順序に対応します。ij = k ですが、 ji = − k です。方向性を逆にすると、上記の式は p ↦ q −1 p q になります。つまり、単位 q が共役四元数に置き換えられます。これは軸ベクトルと同じ振る舞いです。 u → {\displaystyle {\vec {u}}}
代替規約 [16] によると 、航空宇宙分野、そして程度は低いもののロボット工学分野では、代替の四元数表記法の存在と継続的な使用が、多大な継続的なコストを発生させている と 報告されています 。この代替表記法は[17]でシュスター医学博士によって提案されており 、 四元 数 基底 要素の乗算の定義をシュスターの表記法では と逆にすることで従来の表記法から逸脱しています。 一方、ハミルトンの定義は です。この表記法は、 NASA ジェット推進研究所 の一部で使用されているため、「JPL表記法」とも呼ばれています 。 i j = − k {\displaystyle \mathbf {i} \mathbf {j} =-\mathbf {k} } i j = k {\displaystyle \mathbf {i} \mathbf {j} =\mathbf {k} }
シュスターの表記法では、2つの四元数を乗算する式は次のように変更される。
( r 1 , v → 1 ) ( r 2 , v → 2 ) = ( r 1 r 2 − v → 1 ⋅ v → 2 , r 1 v → 2 + r 2 v → 1 − v → 1 × v → 2 ) , (Alternative convention, usage discouraged!) {\displaystyle \left(r_{1},\ {\vec {v}}_{1}\right)\left(r_{2},\ {\vec {v}}_{2}\right)=\left(r_{1}r_{2}-{\vec {v}}_{1}\cdot {\vec {v}}_{2},\ r_{1}{\vec {v}}_{2}+r_{2}{\vec {v}}_{1}\mathbin {\color {red}\mathbf {-} } {\vec {v}}_{1}\times {\vec {v}}_{2}\right),\qquad {\text{(Alternative convention, usage discouraged!)}}} ベクトルを四元数で回転させる式は次のように変更される。
p alt ′ = ( v ⊗ v + q r 2 I − 2 q r [ v ] × + [ v ] × 2 ) p (Alternative convention, usage discouraged!) = ( I − 2 q r [ v ] × + 2 [ v ] × 2 ) p {\displaystyle {\begin{aligned}\mathbf {p} '_{\text{alt}}={}&(\mathbf {v} \otimes \mathbf {v} +q_{r}^{2}\mathbf {I} \mathbin {\color {red}\mathbf {-} } 2q_{r}[\mathbf {v} ]_{\times }+[\mathbf {v} ]_{\times }^{2})\mathbf {p} &{\text{(Alternative convention, usage discouraged!)}}\\=&\ (\mathbf {I} \mathbin {\color {red}\mathbf {-} } 2q_{r}[\mathbf {v} ]_{\times }+2[\mathbf {v} ]_{\times }^{2})\mathbf {p} &\end{aligned}}} シュスターの表記法による変更点を確認するには、外積の前の符号がプラスからマイナスに反転している点に注目してください。
最後に、四元数を回転行列に変換する式は次のように変更されます
R a l t = I − 2 q r [ v ] × + 2 [ v ] × 2 (Alternative convention, usage discouraged!) = [ 1 − 2 s ( q j 2 + q k 2 ) 2 ( q i q j + q k q r ) 2 ( q i q k − q j q r ) 2 ( q i q j − q k q r ) 1 − 2 s ( q i 2 + q k 2 ) 2 ( q j q k + q i q r ) 2 ( q i q k + q j q r ) 2 ( q j q k − q i q r ) 1 − 2 s ( q i 2 + q j 2 ) ] {\displaystyle {\begin{aligned}\mathbf {R} _{alt}&=\mathbf {I} \mathbin {\color {red}\mathbf {-} } 2q_{r}[\mathbf {v} ]_{\times }+2[\mathbf {v} ]_{\times }^{2}\qquad {\text{(Alternative convention, usage discouraged!)}}\\&={\begin{bmatrix}1-2s(q_{j}^{2}+q_{k}^{2})&2(q_{i}q_{j}+q_{k}q_{r})&2(q_{i}q_{k}-q_{j}q_{r})\\2(q_{i}q_{j}-q_{k}q_{r})&1-2s(q_{i}^{2}+q_{k}^{2})&2(q_{j}q_{k}+q_{i}q_{r})\\2(q_{i}q_{k}+q_{j}q_{r})&2(q_{j}q_{k}-q_{i}q_{r})&1-2s(q_{i}^{2}+q_{j}^{2})\end{bmatrix}}\end{aligned}}} これは、 従来の規則に従って変換された回転行列の 転置と全く同じです。
使用される規則によるソフトウェアアプリケーション 以下の表は、アプリケーションをいずれかの四元数規則に準拠しているかどうかでグループ分けしています。 [16]
どちらの規則を使用しても、作成されたアプリケーションの機能や正確性には影響しませんが、 [16] の著者は、 シュスター規則はハミルトンによるはるかに古い四元数乗算規則から逸脱しており、数学や理論物理学の分野で採用される可能性は低いため、放棄すべきだと主張しました。
回転の他の表現との比較
四元数の利点 回転を四元数(4つの数値)で表現すると、 直交行列 (9つの数値)で表現するよりもコンパクトになります。さらに、与えられた軸と角度に対して、対応する四元数を簡単に構築でき、逆に、与えられた四元数に対して、軸と角度を簡単に読み取ることができます。これらはどちらも、行列やオイラー角でははるかに 困難 です
ビデオゲーム やその他のアプリケーションでは 、「滑らかな回転」、つまりシーンが一回ではなくゆっくりと回転することが求められることがよくあります。これは、クォータニオンにおける 球面線形補間 などの 曲線 を選択することで実現できます。一方の端点は恒等変換1(またはその他の初期回転)であり、もう一方の端点は意図した最終的な回転です。これは、他の回転表現ではより問題になります。
コンピュータ上で複数の回転を合成する場合、丸め誤差は必然的に蓄積されます。わずかにずれたクォータニオンは、正規化後も回転を表します。わずかにずれた行列はもはや 直交し ていない可能性があり、適切な直交行列に戻すのが難しくなります
四元数は 、例えば ピッチ/ヨー/ロール回転システム において、ピッチが90°上下に回転するとヨーとロールが同じ動きに対応し、回転の自由度が失われる場合に発生する ジンバルロック と呼ばれる現象も回避します。例えば、 ジンバル ベースの航空宇宙 慣性航法システムでは、航空機が急降下または上昇している場合、これは悲惨な結果をもたらす可能性があります。
行列表現との間の変換
四元数から直交行列への変換 列ベクトルを後置乗算した場合の単位四元数z = a + b i + c j + d k ( | z | = 1 )による回転に対応する 直交行列 は 、次のように与えられます。
R = ( a 2 + b 2 − c 2 − d 2 2 b c − 2 a d 2 b d + 2 a c 2 b c + 2 a d a 2 − b 2 + c 2 − d 2 2 c d − 2 a b 2 b d − 2 a c 2 c d + 2 a b a 2 − b 2 − c 2 + d 2 ) . {\displaystyle R={\begin{pmatrix}a^{2}+b^{2}-c^{2}-d^{2}&2bc-2ad&2bd+2ac\\2bc+2ad&a^{2}-b^{2}+c^{2}-d^{2}&2cd-2ab\\2bd-2ac&2cd+2ab&a^{2}-b^{2}-c^{2}+d^{2}\\\end{pmatrix}}.} この回転行列は、ベクトルw 上でとして使用されます。この回転の四元数表現は次 のよう に与えられます。 w rotated = R ⋅ w {\displaystyle w_{\text{rotated}}=R\cdot w}
[ 0 w rotated ] = z [ 0 w ] z ∗ , {\displaystyle {\begin{bmatrix}0\\w_{\text{rotated}}\end{bmatrix}}=z{\begin{bmatrix}0\\w\end{bmatrix}}z^{*},} ここで 、は四元数の共役であり 、次のように与えられます z ∗ {\displaystyle z^{*}} z {\displaystyle z} z ∗ = a − b i − c j − d k {\displaystyle \mathbf {z} ^{*}=a-b\mathbf {i} -c\mathbf {j} -d\mathbf {k} }
また、四元数の乗算は次のように定義されます( a と bは 上記の z のように四元数であると仮定します)。
a b = ( a 0 b 0 − a → ⋅ b → ; a 0 b → + b 0 a → + a → × b → ) {\displaystyle ab=\left(a_{0}b_{0}-{\vec {a}}\cdot {\vec {b}};a_{0}{\vec {b}}+b_{0}{\vec {a}}+{\vec {a}}\times {\vec {b}}\right)}
ここで、2つのベクトルの外積は可換ではないため、 a 、 b の順序は重要です。
四元数を単位正規化する必要がない、より効率的な計算は [20]で与えられます。
R = ( 1 − c c − d d b c − a d b d + a c b c + a d 1 − b b − d d c d − a b b d − a c c d + a b 1 − b b − c c ) , {\displaystyle R={\begin{pmatrix}1-cc-dd&bc-ad&bd+ac\\bc+ad&1-bb-dd&cd-ab\\bd-ac&cd+ab&1-bb-cc\\\end{pmatrix}},} ここで、以下の中間量が定義されています。
s = 2 / ( a ⋅ a + b ⋅ b + c ⋅ c + d ⋅ d ) , b s = b ⋅ s , c s = c ⋅ s , d s = d ⋅ s , a b = a ⋅ b s , a c = a ⋅ c s , a d = a ⋅ d s , b b = b ⋅ b s , b c = b ⋅ c s , b d = b ⋅ d s , c c = c ⋅ c s , c d = c ⋅ d s , d d = d ⋅ d s . {\displaystyle {\begin{alignedat}{2}&\ \ s=2/(a\cdot a+b\cdot b+c\cdot c+d\cdot d),\\&{\begin{array}{lll}bs=b\cdot s,&cs=c\cdot s,&ds=d\cdot s,\\ab=a\cdot bs,&ac=a\cdot cs,&ad=a\cdot ds,\\bb=b\cdot bs,&bc=b\cdot cs,&bd=b\cdot ds,\\cc=c\cdot cs,&cd=c\cdot ds,&dd=d\cdot ds.\\\end{array}}\end{alignedat}}}
直交行列から四元数へ 回転行列を四元数に変換する際には注意が必要です。回転行列の トレース (対角要素の和)が0または非常に小さい場合、いくつかの単純な方法は不安定になる傾向があるためです。直交行列を四元数に変換する安定した方法については、 回転行列#四元数 を参照してください。
四元数のフィッティング 上のセクションでは、 3×3 回転行列 Q から四元数 q を復元する方法を説明しました。しかし、例えば 丸め誤差 のために純粋な回転ではない行列 Q があり、 Q を 最も正確に表す四元数 q を見つけたいとします。その場合、対称 4×4 行列
を構築します
K = 1 3 [ Q x x − Q y y − Q z z Q y x + Q x y Q z x + Q x z Q z y − Q y z Q y x + Q x y Q y y − Q x x − Q z z Q z y + Q y z Q x z − Q z x Q z x + Q x z Q z y + Q y z Q z z − Q x x − Q y y Q y x − Q x y Q z y − Q y z Q x z − Q z x Q y x − Q x y Q x x + Q y y + Q z z ] , {\displaystyle K={\frac {1}{3}}{\begin{bmatrix}Q_{xx}-Q_{yy}-Q_{zz}&Q_{yx}+Q_{xy}&Q_{zx}+Q_{xz}&Q_{zy}-Q_{yz}\\Q_{yx}+Q_{xy}&Q_{yy}-Q_{xx}-Q_{zz}&Q_{zy}+Q_{yz}&Q_{xz}-Q_{zx}\\Q_{zx}+Q_{xz}&Q_{zy}+Q_{yz}&Q_{zz}-Q_{xx}-Q_{yy}&Q_{yx}-Q_{xy}\\Q_{zy}-Q_{yz}&Q_{xz}-Q_{zx}&Q_{yx}-Q_{xy}&Q_{xx}+Q_{yy}+Q_{zz}\end{bmatrix}},} そして、 最大の固有値に対応する 固有ベクトル ( x , y , z , w )を求めます(その値は、 Qが純粋な回転の場合にのみ 1 になります)。こうして得られた四元数は、元の行列 Q に最も近い回転に対応します [ 疑わしい – 議論が必要 ] 。 [21]
このセクションでは、3D で回転を実行するために四元数を使用する場合と他の方法(軸/角度または回転行列)を使用する場合のパフォーマンスへの影響について説明します。
結果 ストレージ要件 方法 ストレージ 回転行列 9 または 6(下記参照) 四元数 4 または 3(下記参照) 角度–軸 4 または 3(下記参照)
回転は単位四元数で表されるため、四元数の要素のうち独立しているのは3つだけです。さらに計算するには通常4つの要素すべてが必要になるため、すべての計算で4番目の要素を復元するための追加コストが発生します。同様に、角度軸は単位方向に角度(またはその関数)を乗算することで3要素ベクトルに格納できますが、計算に使用する場合は追加の計算コストがかかります。同様に、回転行列には直交基底ベクトルが必要であるため、3次元空間では最初の2つのベクトルの外積を用いて3番目のベクトルを明確に計算できます(ただし、 不適切な回転 が許容される場合、3番目のベクトルの符号には曖昧さがあります)。
回転連鎖演算の性能比較 方法 乗算回数 加算/減算回数 演算合計 回転行列 27 18 45 四元数 16 12 28
ベクトル回転演算の性能比較 [22] [23] 方法 乗算回数 加算/減算回数 sin/cos 演算合計 回転行列 9 6 0 15 四元数 * 中間行列なし 15 15 0 30 中間行列あり 21 18 0 39 角度軸 中間行列なし 18 13 2 31 + 2 中間行列あり 21 16 2 37 + 2
* 四元数は、回転行列(12回の乗算と12回の加算/減算)に暗黙的に変換できます。これにより、回転行列法による以下のベクトルの回転コストが平準化されます。
使用される方法 ベクトル v → を回転させるには、3つの基本的なアプローチがあります。
3×3 回転行列 Rと、 v → を表す 元の 3×1 列 行列との行列積を計算します 。これには、3×(3回の乗算 + 2回の加算)= 9回の乗算と6回の加算が必要であり、ベクトルを回転させる最も効率的な方法です 回転は、スカラー(実数)部 w とベクトル(虚数)部 r → を持つ単位長さの四元数 q = ( w , r → ) で表すことができます。回転は、 式 を用いて3次元ベクトル v → に適用できます。評価には15回の乗算と15回の加算のみが必要です(2の因数を乗算で計算する場合は、18回の乗算と12回の加算で済みます)。この式は、もともと軸/角度表記(ロドリゲスの公式)で使用されると考えられていましたが、四元数表記にも適用できます。これは、 効率は劣るものの、よりコンパクトな四元数乗算の式 と同じ結果をもたらします v → new = v → + 2 r → × ( r → × v → + w v → ) {\displaystyle {\vec {v}}_{\text{new}}={\vec {v}}+2{\vec {r}}\times ({\vec {r}}\times {\vec {v}}+w{\vec {v}})} v → new = q v → q − 1 {\displaystyle {\vec {v}}_{\text{new}}=q{\vec {v}}q^{-1}} 角度/軸の公式 を使用して 角度/軸を 回転行列 R に変換し、ベクトルを乗算するか、同様に、四元数表記を回転行列に変換する公式を使用してベクトルを乗算します。角度/軸を R に変換するには、 12回の乗算、2回の関数呼び出し(sin、cos)、10回の加算/減算が必要です。項目1から、 R を使用して回転すると、さらに9回の乗算と6回の加算が追加され、合計21回の乗算、16回の加算/減算、2回の関数呼び出し(sin、cos)になります。四元数を R に変換するには、12回の乗算と12回の加算/減算が必要です。項目1から、 R を使用して回転すると、さらに9回の乗算と6回の加算が追加され、合計21回の乗算と18回の加算/減算になります。 nベクトル回転演算のパフォーマンス比較 方法 乗算回数 加算/減算回数 sin/cos 演算合計 回転行列 9 n 6 n 0 15 n 四元数 * 中間行列なし 15 n 15 n 0 30 n 中間行列あり 9 n + 12 6 n + 12 0 15 n + 24 角度軸 中間行列なし 18 n 12 n + 1 2 30 n + 3 中間行列あり 9 n + 12 6 n + 10 2 15 n + 24
4次元空間における回転としての単位四元数のペア 単位四元数のペアと は 、 4次元空間における任意の回転 を表すことができます。 四元数 として表現された 4次元ベクトル が与えられた場合 、次のように回転させることができます。 z L = a L + b L i + c L j + d L k {\displaystyle \mathbf {z} _{\rm {L}}=a_{\rm {L}}+b_{\rm {L}}i+c_{\rm {L}}j+d_{\rm {L}}k} z R = a R + b R i + c R j + d R k {\displaystyle \mathbf {z} _{\rm {R}}=a_{\rm {R}}+b_{\rm {R}}i+c_{\rm {R}}j+d_{\rm {R}}k} v → {\displaystyle {\vec {v}}} v → = w + x i + y j + z k {\displaystyle {\vec {v}}=w+xi+yj+zk}
f ( v → ) = z L v → z R = M L M R v → = ( a L − b L − c L − d L b L a L − d L c L c L d L a L − b L d L − c L b L a L ) ( a R − b R − c R − d R b R a R d R − c R c R − d R a R b R d R c R − b R a R ) ( w x y z ) , {\displaystyle f\left({\vec {v}}\right)=\mathbf {z} _{\rm {L}}{\vec {v}}\mathbf {z} _{\rm {R}}=M_{\rm {L}}M_{\rm {R}}{\vec {v}}={\begin{pmatrix}a_{\rm {L}}&-b_{\rm {L}}&-c_{\rm {L}}&-d_{\rm {L}}\\b_{\rm {L}}&a_{\rm {L}}&-d_{\rm {L}}&c_{\rm {L}}\\c_{\rm {L}}&d_{\rm {L}}&a_{\rm {L}}&-b_{\rm {L}}\\d_{\rm {L}}&-c_{\rm {L}}&b_{\rm {L}}&a_{\rm {L}}\end{pmatrix}}{\begin{pmatrix}a_{\rm {R}}&-b_{\rm {R}}&-c_{\rm {R}}&-d_{\rm {R}}\\b_{\rm {R}}&a_{\rm {R}}&d_{\rm {R}}&-c_{\rm {R}}\\c_{\rm {R}}&-d_{\rm {R}}&a_{\rm {R}}&b_{\rm {R}}\\d_{\rm {R}}&c_{\rm {R}}&-b_{\rm {R}}&a_{\rm {R}}\end{pmatrix}}{\begin{pmatrix}w\\x\\y\\z\end{pmatrix}},} ここで、行列 と は 、 それぞれ左と右の四元数の乗算を表します。これらの行列を合わせると、 における回転の 等傾斜分解 を形成します。四元数の乗算は 結合的で あるため、次の式が成り立ちます
。 M L {\displaystyle M_{\rm {L}}} M R {\displaystyle M_{\rm {R}}} R 4 {\displaystyle \mathbb {R} ^{4}}
( z L v → ) z R = M R M L v → = M L M R v → = z L ( v → z R ) {\displaystyle (\mathbf {z} _{\rm {L}}{\vec {v}})\mathbf {z} _{\rm {R}}=M_{\rm {R}}M_{\rm {L}}{\vec {v}}=M_{\rm {L}}M_{\rm {R}}{\vec {v}}=\mathbf {z} _{\rm {L}}({\vec {v}}\mathbf {z} _{\rm {R}})} 。 したがって、2つの行列 と は交換可能でなければなりません。これは、4次元回転の群内に2つの交換可能な 部分群 が存在することを意味します 。任意の4次元回転には6つの自由度があり、各行列はこれらの6つの自由度のうち3つに貢献します M L {\displaystyle M_{\rm {L}}} M R {\displaystyle M_{\rm {R}}}
4次元回転の生成元は、四元数のペアで表すことができるため(以下のように)、すべての4次元回転も表すことができます。
z L v → z R = ( 1 − d t a b − d t a c − d t a d d t a b 1 − d t b c − d t b d d t a c d t b c 1 − d t c d d t a d d t b d d t c d 1 ) ( w x y z ) z L = 1 + d t a b + d t c d 2 i + d t a c − d t b d 2 j + d t a d + d t b c 2 k z R = 1 + d t a b − d t c d 2 i + d t a c + d t b d 2 j + d t a d − d t b c 2 k {\displaystyle {\begin{aligned}\mathbf {z} _{\rm {L}}{\vec {v}}\mathbf {z} _{\rm {R}}&={\begin{pmatrix}1&-dt_{ab}&-dt_{ac}&-dt_{ad}\\dt_{ab}&1&-dt_{bc}&-dt_{bd}\\dt_{ac}&dt_{bc}&1&-dt_{cd}\\dt_{ad}&dt_{bd}&dt_{cd}&1\end{pmatrix}}{\begin{pmatrix}w\\x\\y\\z\end{pmatrix}}\\[3pt]\mathbf {z} _{\rm {L}}&=1+{dt_{ab}+dt_{cd} \over 2}i+{dt_{ac}-dt_{bd} \over 2}j+{dt_{ad}+dt_{bc} \over 2}k\\[3pt]\mathbf {z} _{\rm {R}}&=1+{dt_{ab}-dt_{cd} \over 2}i+{dt_{ac}+dt_{bd} \over 2}j+{dt_{ad}-dt_{bc} \over 2}k\end{aligned}}}
参照
参考文献 ^ Shoemake, Ken (1985). "Animating Rotation with Quaternion Curves" (PDF) . Computer Graphics . 19 (3): 245– 254. doi :10.1145/325165.325242. SIGGRAPH '85 で発表. ^ JM McCarthy, 1990, Introduction to Theoretical Kinematics, MIT Press ^ Amnon Katz (1996) Computational Rigid Vehicle Dynamics , Krieger Publishing ISBN 978-1575240169 ^ JBカイパース (1999) 『クォータニオンと回転シーケンス:軌道、航空宇宙、仮想現実への応用入門』 プリンストン 大学出版局 ISBN 978-0-691-10298-6 ^ Karsten Kunze、Helmut Schaeben (2004年11月). 「四元数のビンガム分布とテクスチャ解析における球状ラドン変換」. Mathematical Geology . 36 (8): 917–943 . doi :10.1023/B:MATG.0000048799.56445.59. ResearchGate :226385995. ユークリッド幾何学と非ユークリッド幾何学. Patrick J. Ryan, Cambridge University Press, Cambridge, 1987. ^ I.L. Kantor. Hypercomplex numbers , Springer-Verlag, New York, 1989. ^ Andrew J. Hanson. Visualizing Quaternions, Morgan Kaufmann Publishers, Amsterdam, 2006 ^ JH ConwayとDA Smith. 四元数と八元数について、AK Peters、マサチューセッツ州ネイティック、2003年。 ^ "comp.graphics.algorithms FAQ" 。 2017年 7月2日 閲覧。 ^ ロドリゲス、O. (1840). 「空間における固体システムの変位を制御する幾何学的法則、そして、生産に影響を及ぼす原因とは独立して考えられる変位の座標変化」. Journal de Mathématiques Pures et Appliquées . Série 1. 5 : 380–440 . フリード バーグ、リチャード (2022). 「ロドリゲス、オリンデ:「固体システムの変位を制御する幾何学的法則…」、翻訳と解説」. arXiv : 2211.07787 [math.HO] ^ ウィリアム・ローワン・ハミルトン (1844~1850)「四元数、あるいは代数学における新しい虚数体系について」 『哲学雑誌』 、 ダブリン・トリニティ・カレッジ のデイヴィッド・R・ウィルキンス・コレクションへのリンク ^ Lee, Byung-Uk (1991)、「四元数による微分、付録B」 (PDF) 、 頭蓋骨ランドマークのステレオマッチング (博士論文)、スタンフォード大学、pp. 57-58 ^ Altmann, Simon L. (1989). 「ハミルトン、ロドリゲス、そして四元数スキャンダル」 『数学雑誌 』、 62 (5): 306. doi :10.2307/2689481. JSTOR 2689481 ^ サイモン・L・アルトマン (1986) 回転、四元数、そして二重群 、ドーバー出版(特に第12章を参照) ^ abc Sommer, H. (2018)、「反転した四元数乗算を避ける理由と方法」、 Aerospace 、 5 (3): 72、 arXiv : 1801.07478 、 Bibcode :2018Aeros...5...72S、 doi : 10.3390/aerospace5030072 、 ISSN 2226-4310 ^ Shuster, MD (1993)、「姿勢表現の調査」、 Journal of the Astronautical Sciences 、 41 (4): 439– 517、 Bibcode :1993JAnSc..41..439S、 ISSN 0021-9142 ^ 「MATLAB Aerospace Toolbox quatrotate」 ^ MATLAB Aerospace Toolboxはハミルトン乗算規則を使用していますが、*能動的な*回転ではなく*受動的な*回転を適用するため、リストされている四元数は実際にはシュスター規則を使用した能動的な回転です。 [18] ^ Alan WattとMark Watt (1992) 『Advanced Animation and Rendering Techniques: Theory and Practice』 、 ACM Press ISBN 978-0201544121 ^ Bar-Itzhack, Itzhack Y. (2000年11月~12月)、「回転行列から四元数を抽出するための新しい方法」、 Journal of Guidance, Control and Dynamics 、 23 (6): 1085– 1087、 Bibcode :2000JGCD...23.1085B、 doi :10.2514/2.4654、 ISSN 0731-5090 ^ Eberly, D., 回転表現とパフォーマンスの問題 ^ "Bitbucket". bitbucket.org . 2015年11月17日にオリジナルからアーカイブ。 2015年11月14日 閲覧 。
参考文献 Grubin, Carl (1970). 「オイラー軸と角度による四元数スキームの導出」. Journal of Spacecraft and Rockets . 7 (10): 1261– 1263. Bibcode :1970JSpRo...7.1261G. doi :10.2514/3.30149 バティ=プラット、EP;レイシー、TJ (1980).「基本粒子の幾何学的モデル」. 国際 理論物理学ジャーナル .19 (6): 437–475 . 書誌コード :1980IJTP...19..437B. doi :10.1007/BF00671608. S2CID 120642923 Arribas, M.; Elipe, A.; Palacios, M. (2006). 「クォータニオンと剛体の回転」. Celest. Mech. Dyn. Astron . 96 ( 3–4 ): 239– 251. Bibcode :2006CeMDA..96..239A. doi :10.1007/s10569-006-9037-6. S2CID 123591599.
外部リンクとリソース Shoemake, Ken. 「クォータニオン」 (PDF) 。 2020年5月3日にオリジナルから アーカイブ (PDF) 。 「75以上のコンピュータ言語におけるシンプルなクォータニオン型と演算」。 Rosettaコード について Hart, John C. 「クォータニオンデモンストレーター」 ダム、エイク・B.;コッホ、マーティン;リルホルム、マーティン (1998).「四元数、補間、そしてアニメーション」 (PDF) . レアンドラ、ヴィッチ (2001).「3次元空間における四元数と回転:代数とその幾何学的解釈」 (PDF) . Howell, Thomas; Lafon, Jean-Claude (1975). 「四元数積の計算量、TR75-245」 (PDF) . コーネル大学. Horn, Berthold KP (2001). 「単位四元数と回転に関するいくつかの注釈」 (PDF) . Lee, Byung-Uk (1991). 回転の単位四元数表現 - 付録A、四元数による微分 - 付録B (PDF) (博士論文). スタンフォード大学. Vance, Rod. 「連結リー群のいくつかの例」. 2018年12月15日時点のオリジナルからのアーカイブ. 「四元数回転の視覚的表現」.