四元数や表記法の詳細については『四元数まとめ資料』をご参照ください。
回転ベクトルって呼び方あってるのかな
この記事における回転ベクトルとは、ベクトルそのものが回転軸を表し、そのノルムが軸周りの回転角を表す以下のようなベクトル$( \boldsymbol{r} $)のことを指します。
$[ \boldsymbol{r} = \theta \boldsymbol{n} \quad (0 \leq \theta < 2 \pi) \tag{1} $]
ここで、$( \boldsymbol{r}, \boldsymbol{n} \in \mathbb{R}^3 $)かつ$( \theta \in \mathbb{R} $)です。
「回転ベクトル」で調べてもあまり出てこないので、もしかしたら学術的に正しい呼び方ではないのかもしれません。 とはいえ他に適切な表現も思いつかないので本記事中では回転ベクトルと呼ぶことにします。
四元数 → 回転ベクトル
回転を表す四元数$( \tilde{q} $)を考えます。
$[ \begin{equation*} \tilde{q} = \mathsf{S} \tilde{q} + \mathsf{V} \tilde{q} \quad (\| \tilde{q} \| = 1) \tag{2} \end{equation*} $]ただし、$( \mathsf{S} $)および$( \mathsf{V} $)はそれぞれ四元数のスカラー部とベクトル部を取り出す演算子です。
四元数のベクトル部は3次元空間における回転軸を表しますから、式(2)を回転ベクトルに変換する場合、単純に考えると
$[ \begin{equation*} \boldsymbol{r} = \theta \cdot \frac{\mathsf{V} \tilde{q}}{\| \mathsf{V} \tilde{q} \|} = \theta \cdot \frac{ \mathsf{V} \tilde{q} }{ \sin \frac{\theta}{2} } \tag{3} \end{equation*} $]となります。ただし、$( \theta $)は以下の式で求まるものとします。
$[ \begin{equation*} \theta = \left \{ \, \begin{aligned} & + 2 \sin^{-1} (\| \mathsf{V} \tilde{q} \|) \quad (\mathsf{S} \tilde{q} \geq 0) \\ & - 2 \sin^{-1} (\| \mathsf{V} \tilde{q} \|) \quad (\mathsf{S} \tilde{q} < 0) \end{aligned} \right. \tag{4} \end{equation*} $]上式で求めると$( \theta $)の範囲が$( (-\pi, \pi] $)となるので何かと便利です。
※ $( \theta $)の範囲が$( (-\pi, \pi] $)であっても、回転軸の向きを正しくとれば3次元空間における回転を正しく表現できます。
変換自体は以上のようにして行うことができるのですが、ここで気になるのは $( \| \mathsf{V} \tilde{q} \| = 0 $) における特異点の存在です。そこで、
$[ \begin{equation*} \mathrm{sinc}(x) := \frac{\sin(x)}{x} \tag{5} \end{equation*} $]
として定義されるsinc関数(Wikipedia)を用いて式(3)を以下のように変形します。
$[ \begin{equation*} \boldsymbol{r} = 2 \cdot \frac{\theta}{2} \cdot \frac{\mathsf{V} \tilde{q}}{\sin(\theta / 2)} = \frac{2}{ \mathrm{sinc} (\theta / 2) } \mathsf{V} \tilde{q} \tag{6} \end{equation*} $]sinc関数は$( x=0 $)に特異点を持たない(ようにできる)ため、上式のように変形することで特異点の無い変換が可能となります。
さて、これで完璧にも思えるのですが、定義からわかるようにsinc関数は偶関数なので式(4)により$( \theta $)の符号を操作してもsinc関数に入れた時点でその情報は消えてしまいます。
符号情報を正しく反映するために、最終的な変換式は以下のようにします。
$[ \begin{equation*} \boldsymbol{r} = \left \{ \, \begin{aligned} & \frac{+2}{\mathrm{sinc}(\theta / 2)} \mathsf{V} \tilde{q} \quad (\mathsf{S} \tilde{q} \geq 0) \\ & \frac{-2}{\mathrm{sinc}(\theta / 2)} \mathsf{V} \tilde{q} \quad (\mathsf{S} \tilde{q} < 0) \end{aligned} \right. \tag{7} \end{equation*} $]ただし、
$[ \begin{equation*} \theta / 2 = \sin^{-1} (\| \mathsf{V} \tilde{q} \|) \tag{8} \end{equation*} $]です。
回転ベクトル → 四元数
四元数から回転ベクトルへの変換と同じように、回転ベクトルから四元数への変換においても特異点の無い変換を行うことが可能です。
式(1)の回転ベクトルを四元数に変換する場合、まずsinc関数を使わない方法では単純に
$[ \begin{equation*} \tilde{q} = \cos \frac{\| \boldsymbol{r} \|}{2} + \frac{ \boldsymbol{r} }{\| \boldsymbol{r} \|} \sin \frac{\| \boldsymbol{r} \|}{2} \tag{9} \end{equation*} $]となりますが、この式は $( \| \boldsymbol{r} \| = 0 $) に特異点を持ちます。
一方、sinc関数を使うと$( \mathsf{V} \tilde{q} $)に関して
$[ \begin{align*} \mathsf{V} \tilde{q} &= \frac{\boldsymbol{r}}{\| \boldsymbol{r} \|} \sin \frac{\| \boldsymbol{r} \|}{2} \tag{10} \\ &= \frac{ \mathrm{sinc} (\| \boldsymbol{r} \| / 2) }{2} \boldsymbol{r} \tag{11} \end{align*} $]となるので、四元数への変換式は
$[ \begin{equation*} \tilde{q} = \cos \frac{\| \boldsymbol{r} \|}{2} + \frac{ \mathrm{sinc} (\| \boldsymbol{r} \| / 2) }{2} \boldsymbol{r} \tag{12} \end{equation*} $]となります。
回転ベクトルから四元数への変換に関しては、符号操作に関するややこしい話は出てきません。
おまけ(sinc関数について)
sinc関数が特異点を持たないことはsin関数のマクローリン展開から確認できます。
sin関数のマクローリン展開は
$[ \begin{equation*} \sin (x) = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \cdots \end{equation*} $]ですので、sinc関数の定義通りこれを$( x $)で除すると
$[ \begin{equation*} \mathrm{sinc} (x) = \frac{\sin (x)}{x} = 1 - \frac{x^2}{3!} + \frac{x^4}{5!} - \frac{x^6}{7!} + \cdots \end{equation*} $]となり、$( x=0 $)における特異点は除去できることがわかります。