機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。数式が整うまで少し時間かかります。リンクフリーです。

勉強ログです。リンクフリーです
目次へ戻る

剛体変換を表す行列を「二重四元数」と「オイラー角+平行移動」に変換する

剛体変換を表す行列

剛体変換を表す行列 {\bf M}\in{\mathbb R}^{4\times 4} は以下のようになっています。
{\bf R}\in{\mathbb R}^{3\times 3}, {\bf t}\in{\mathbb R}^3 とします。

\begin{eqnarray}
{\bf M}=
\left(
\begin{array}{ccc|c}
   & & & \\
   & \large{\bf R} &  & \large{\bf t} \\
   & & & \\  \hline
   0 & 0 & 0 & 1
\end{array}
\right)\tag{1}
\end{eqnarray}
(1) の行列から、回転変換と平行移動変換を抽出するのですが、そのためには回転が先か平行移動が先か指定する必要があります。
どちらを指定しても回転変換は同じですが、平行移動変換が変わります。
回転行列 {\bf R} から変換された単位四元数r\in{\mathbb H} とします。
回転行列から単位四元数への変換の記事で行列から単位四元数への変換は解説しています。

剛体変換を表す行列を「二重四元数」に変換する

回転変換が先の場合

このとき、位置ベクトル {\bf p}\in{\mathbb R}^3 は、以下のように変換されます。

\begin{eqnarray}
{\bf R}{\bf p}+{\bf t}\tag{2}
\end{eqnarray}
よって、平行移動変換に対応する四元数(0,{\bf t}) となります。
以上より、「回転変換が先」の場合の二重四元数(r,(0,{\bf t})) です。

平行移動変換が先の場合

このとき、位置ベクトル {\bf p}\in{\mathbb R}^3 は、以下のように変換されます。平行移動ベクトルを {\bf t}' とします。

\begin{eqnarray}
{\bf R}({\bf p}+{\bf t}')={\bf R}{\bf p}+{\bf R}{\bf t}'\tag{3}
\end{eqnarray}
(3)(1) を比較します。
\begin{eqnarray}
{\bf R}{\bf t}'={\bf t}\\
\Rightarrow{\bf t}'={\bf R}^{-1}{\bf t}\tag{4}
\end{eqnarray}
よって、平行移動変換に対応する四元数(0,{\bf R}^{-1}{\bf t}) となります。
以上より、「平行移動変換が先」の場合の二重四元数(r,(0,{\bf R}^{-1}{\bf t})) です。

剛体変換を表す行列を「オイラー角+平行移動」に変換する

回転行列をオイラー角に変換する方法はこちらを参考にしてください。
平行移動に関しては上述の通りどちらが先かで異なります。

目次へ戻る