Skip to content

(*)四元数とデュアルクォータニオン

線形変換を行列形式ではなく、四元数を用いて表現することで、回転をより効率的かつ安定的に扱うことができます。 しかし注意が必要ですが、四元数では回転しか扱えないためその概念の拡張が必要になる。

四元数を用いた回転変換は

q=w+xi+yj+zk \mathbf{q} = w + xi + yj + zk

ここで:

  • ww: スカラー成分
  • x,y,zx, y, z: ベクトル成分
  • i,j,ki, j, k: 四元数の単位ベクトル
  • i2=j2=k2=ijk=1 i^2=j^2=k^2=ijk=-1
  • ij=+k,jk=+i,ki=+jij=+k, jk=+i, ki=+j
  • ji=k,kj=i,ik=jji=-k, kj=-i, ik=-j
  • q\mathbf{q}の共役は
    • qˉ\bar{\mathbf{q}}とも表記する
    • q\overline{\mathbf{q}}とも表記する
    • q\mathbf{q}^*とも表記する(デュアルクォータニオンを利用した場合)
  • 虚数成分の符号を反転させたもの
  • 幾何学的には回転を元に戻すことに相当
qˉ=wxiyjzk \bar{\mathbf{q}} = w -xi -yj -zk
  • q\mathbf{q}のノルムはq\|\mathbf{q}\|と表記される
q=w2+x2+y2+z2\|\mathbf{q}\| = \sqrt{w^2+x^2+y^2+z^2}
  • q\mathbf{q}の逆数(逆元)はq1\mathbf{q}^{-1}と表記される
  • お互いをかけると1 (1+0i+0j+0k1+0i+0j+0k)になるもの(逆行列みたいなもの)
q1=qˉq \mathbf{q}^{-1} = \frac{\bar{\mathbf{q}}}{\|\mathbf{q}\|} q1q2=q1ˉq2ˉ \overline{ \mathbf{q_1} \cdot \mathbf{q_2} } = \bar{\mathbf{q_1}} \cdot \bar{\mathbf{q_2}}

四元数 q=w+xi+yj+zk\mathbf{q} = w + xi + yj + zk の逆元 q1\mathbf{q}^{-1} は、以下の式で計算されます:

q1=qˉq2\mathbf{q}^{-1} = \frac{\bar{\mathbf{q}}}{\|\mathbf{q}\|^2}

ここで:

  • qˉ\bar{\mathbf{q}}: 共役四元数で、qˉ=wxiyjzk\bar{\mathbf{q}} = w - xi - yj - zk
  • q2\|\mathbf{q}\|^2: 四元数のノルムの二乗で、q2=w2+x2+y2+z2\|\mathbf{q}\|^2 = w^2 + x^2 + y^2 + z^2

デュアルクォータニオン:四元数の拡張と空間変換

Section titled “デュアルクォータニオン:四元数の拡張と空間変換”

任意のベクトル v=(x,y,z)\mathbf{v} = (x, y, z) に対して、四元数回転を適用する場合:

v=qvq1\mathbf{v}' = \mathbf{q} \mathbf{v} \mathbf{q}^{-1}
  • q\mathbf{q}: 回転を表す四元数
  • q1\mathbf{q}^{-1}: 四元数 q\mathbf{q} の逆元

四元数では直接平行移動を表現できないため、回転と平行移動を統合する場合、以下の形式を使用します:

T(v)=qvq1+tT(\mathbf{v}) = \mathbf{q} \mathbf{v} \mathbf{q}^{-1} + \mathbf{t}

ここで:

  • TT: 変換全体
  • t\mathbf{t}: 平行移動ベクトル

対象の図形を以下の要領で移動させることを考える

  • 世界座標点 (1,1)(1, 1) を中心に π/2\pi/2 回転
  • ローカル座標での移動ベクトル (2,0)(2, 0)

二次元の時には 四元数は右手系座標系で考えるため、二次元の場合はz軸を除くx、y軸の平面で考えるため、回転軸はz軸方向となる

四元数 q=w+xi+yj+zk\mathbf{q} = w + xi + yj + zk でz軸周りにθ\thetaだけ回転するときはのx,y,zx, y, zは 回転軸の方向ベクトル u=(ux,uy,uz)u = (u_x, u_y, u_z)を用いて以下のようにあらわされる

  • w=cos(θ/2)w = \cos(\theta/2)
  • x=sin(θ/2)uxx = \sin(\theta/2) \cdot u_x
  • y=sin(θ/2)uyy = \sin(\theta/2) \cdot u_y
  • z=sin(θ/2)uzz = \sin(\theta/2) \cdot u_z
    • θ\thetaはz軸方向を軸とした回転角

回転軸の方向ベクトルは二次元の場合は

  • ux=0u_x=0
  • uy=0u_y=0
  • uz=1u_z=1

zz 成分だけに依存し、四元数は

q=cos(θ/2)+sin(θ/2)kq = \cos(\theta/2) + \sin(\theta/2) \cdot k

となる。

θ=π/2\theta=\pi/2の場合のqvq1\mathbf{q}\mathbf{v}\mathbf{q}^{-1} の計算を行う。

q=cos(π/4)+sin(π/4)j=22+22j\begin{aligned} \mathbf{q} &= \cos(\pi/4) + \sin(\pi/4)j \\ &= \frac{\sqrt{2}}{2} + \frac{\sqrt{2}}{2}j \end{aligned} qˉ= \begin{aligned} \bar{\mathbf{q}} = \end{aligned}

四元数の逆元 q1\mathbf{q}^{-1}は定義に基づき

q1=qˉq2=2222j1=2222j \begin{aligned} \mathbf{q}^{-1} &= \frac{\bar{\mathbf{q}}}{\|\mathbf{q}\|^2}\\ &= \frac{\frac{\sqrt{2}}{2} - \frac{\sqrt{2}}{2}j}{1}\\ &= \frac{\sqrt{2}}{2} - \frac{\sqrt{2}}{2}j \end{aligned}

ベクトル v=(2,0,0)\mathbf{v} = (2, 0, 0) を四元数形式に変換

v=0+2i+0j+0k\mathbf{v} = 0 + 2i + 0j + 0k qv=22+22j=0+2j \begin{aligned} \mathbf{q}\mathbf{v} &= \frac{\sqrt{2}}{2} + \frac{\sqrt{2}}{2}j\\ &= 0 + 2j \end{aligned}

次に:

(qv)q1=(0+2j)(2222j)(\mathbf{q}\mathbf{v})\mathbf{q}^{-1} = \left(0 + 2j\right)\left(\frac{\sqrt{2}}{2} - \frac{\sqrt{2}}{2}j\right)

計算結果:

v=0+0i+2j+0k=(0,2)\mathbf{v}' = 0 + 0i + 2j + 0k = (0, 2)

Three.jsにおけるクォータニオン、デュアルクオータニオン

Section titled “Three.jsにおけるクォータニオン、デュアルクオータニオン”