クォータニオンを用いた回転の補間(LERP, SLERP, SQUAD)
単位四元数$ {\boldsymbol q}_1から$ {\boldsymbol q}_2へ移動させる回転を単位四元数
$ \Delta {\boldsymbol q} = {\boldsymbol q}_2 {\boldsymbol q}^{-1}_1 = \cos \frac{\theta}{2} + \sin \frac{\theta}{2} {\boldsymbol n}
と表し,パラメー タ$ t \in [0, 1] を用いてこの変換を補間する.
注意:ある回転を表す単位四元数は2つ存在する (see: クォータニオンと回転).
内積$ {\boldsymbol q}_1 \cdot {\boldsymbol q}_2 = \cos \frac{\theta}{2}が負のとき$ \pi < \theta < 2 \piなので逆向きに$ 2\pi - \theta回す方が短い経路を辿る.
最短経路での補間を得たいときはどちらかを$ -1倍して内積が正になる組で補間する.
最も簡単な補間として線形補間を正規化する方法がある:
$ {\rm LERP} \left( {\boldsymbol q}_0, {\boldsymbol q}_1 , t \right) = \frac{ \left( 1 - t \right) {\boldsymbol q}_0 + t {\boldsymbol q}_1 } { \left\| \left( 1 - t \right) {\boldsymbol q}_0 + t {\boldsymbol q}_1 \right\| }
これは単位球面上の二点を結ぶ弦上で$ tの割合で内分し,単位球面上に射影して単位四元数に正規化している.
回転角に対して線形になる補間は$ {\boldsymbol q} (t) = \Delta {\boldsymbol q}^t {\boldsymbol q}_1である( 指数関数については see: クォータニオンの指数対数(exp, log)写像).
$ q_1 を左辺に移して,$ {\boldsymbol q}(t) {\boldsymbol q}^{-1}_1 = \Delta {\boldsymbol q}^t = \cos \frac{ t \theta}{2}+ \sin \frac{ t \theta}{2} {\boldsymbol n} となる(角度 $ \theta に対して線形な補間).
指数対数で表記すると$ {\boldsymbol q}(t) = e^{t \log \left( \Delta {\boldsymbol q} \right) } {\boldsymbol q}_1.
$ {\boldsymbol q}_1から$ {\boldsymbol q}(t)までの回転角が線形に変化し,ふたつの単位四元数を単位球面の弧上で等速に補間している.
このような補間方法を球面線形補間 Spherical Linear interpolation (Slerp) と呼ぶ.
Slerpの結果は次の式で計算できる(ググれば出てくるので導出略).
$ {\rm SLERP}\left( {\boldsymbol q}_1, {\boldsymbol q}_2 , t \right) = {\boldsymbol q} (t) = \Delta {\boldsymbol q}^t {\boldsymbol q_1} = \frac{ \sin \frac{ t \theta}{2} }{ \sin \frac{\theta}{2}} {\boldsymbol q}_2 + \frac{ \sin \left( \frac{\theta}{2} - \frac{t \theta}{2} \right) }{\sin \frac{\theta}{2}} {\boldsymbol q}_1
$ {\boldsymbol q}^tを$ tで微分すると,
$ \begin{aligned} \frac{\partial {\boldsymbol q}^t }{\partial t} = \frac{d t \theta}{d t} \frac{\partial {\boldsymbol q}^t}{\partial t \theta} & = \begin{pmatrix} 0 \\ \frac{1}{2} \theta {\boldsymbol n} \end{pmatrix} {\boldsymbol q}^t , \end{aligned}
よって,$ {\rm SLERP}の微分は
$ \begin{aligned} \frac{\partial }{\partial t} {\rm SLERP} \left( {\boldsymbol q}_1, {\boldsymbol q}_2, t \right) &= \begin{pmatrix} 0 \\ \frac{1}{2} \theta {\boldsymbol n} \end{pmatrix} {\rm SLERP} \left( {\boldsymbol q}_1, {\boldsymbol q}_2, t \right) \\ \frac{\partial^2}{\partial t^2} {\rm SLERP} \left( {\boldsymbol q}_1, {\boldsymbol q}_2, t \right) &= \begin{pmatrix} 0 \\ \frac{1}{2} \theta {\boldsymbol n} \end{pmatrix}^2 {\rm SLERP} \left( {\boldsymbol q}_1, {\boldsymbol q}_2, t \right) , \end{aligned}
と計算できる.
より高次の補間方法として Squad (Spherical quadrangle) がある.
四元数(クォータニオン) で参考文献に挙げた "Quaternions, interpolation and animation." は次のように定義した:
$ \begin{aligned} {\rm SQUAD} \left( {\boldsymbol q}_i , {\boldsymbol q}_{i+1}, {\boldsymbol s}_i, {\boldsymbol s}_{i+1} , t \right) & = {\rm SLERP} \left( {\rm SLERP} \left( {\boldsymbol q}_i, {\boldsymbol q}_{i+1} , t \right) , {\rm SLERP} \left( {\boldsymbol s}_i, {\boldsymbol s}_{i+1} , t \right) , 2 t ( 1 - t ) \right) \\ {\boldsymbol s}_i & = {\boldsymbol q}_i \exp \left( - \frac{ \log \left( {\boldsymbol q}^{-1}_i {\boldsymbol q}_{i+1} \right) + \log \left( {\boldsymbol q}^{-1}_i {\boldsymbol q}_{i-1} \right) }{4} \right) \end{aligned}
ここで,$ {\boldsymbol q}_i は単位四元数の列.
$ {\rm SQUAD} \left( {\boldsymbol q}_{i-1}, {\boldsymbol q}_i, {\boldsymbol s}_{i-1} , {\boldsymbol s}_i, 1 \right) = {\rm SQUAD} \left( {\boldsymbol q}_i, {\boldsymbol q}_{i+1}, {\boldsymbol s}_i , {\boldsymbol s}_{i+1}, 0 \right)
$ \frac{ d }{dt}{\rm SQUAD} \left( {\boldsymbol q}_{i-1}, {\boldsymbol q}_i, {\boldsymbol s}_{i-1} , {\boldsymbol s}_i, 1 \right) = \frac{d}{dt}{\rm SQUAD} \left( {\boldsymbol q}_i, {\boldsymbol q}_{i+1}, {\boldsymbol s}_i , {\boldsymbol s}_{i+1}, 0 \right)
が成り立つため,SQUADによって滑らかな(=連続的微分可能 = $ C^1 級)の補間が得られる.
前者は明らか,後者の証明は クォータニオンのSQUADが連続的微分可能であることの証明 に書いた(参考文献の証明とは異なる).
#3DRotation