剛体変換と剛体変換行列 ~具体例と性質 ~
剛体変換とは?
物体の
(またはデータの)
任意の二点間の距離を保つ変換を
剛体変換 (rigid transformation) という。
より具体的には、
物体の任意の位置を $\mathbf{r}$ とし、
$R$ を $3 \times 3$ の
直交行列、
$\mathbf{t}$ を並進ベクトルとするとき、
$$
\tag{1}
$$
と定義される変換を剛体変換という。
解説
解釈
直交行列 $R$ は行列式が $1$ の場合、すなわち、
の場合には、回転変換を表す。
$\det(R)=-1$ の場合には鏡映変換も含む (
直交行列の行列式を参考)。
$R$ が回転変換の場合、剛体変換 $(1)$ は次のように解釈される。
すなわち、物体の任意の位置 $\mathbf{r}$ を $R$ の分だけ回転した後に、
$\mathbf{t}$ だけ並進する変換である。
二点間の距離を保つ
以下では、剛体変換が二点間の距離を保つことを証明する。
ある物体の剛体変換前の任意の二点の位置を $\mathbf{r}_{1}$ と $\mathbf{r}_{2}$ とし、
剛体変換後のそのぞれの位置を
$\mathbf{r}_{1}'$ と $\mathbf{r}_{2}'$ と表す。
これらの間には
が成り立つ。
このとき、変換前の二点間の距離 $d$ は、
であり、
変換後の距離 $d'$ は、
である。
ここで $\| \cdot \|$ は
ノルムを表す記号である。
$d=d'$ が成り立つことは、
ノルムの定義、
内積と転置の関係および
直交行列の定義を用いると、
と示される。
例1:
$z$ 軸回りに $\theta$ 回転させる回転行列
と並進ベクトル
による剛体変換
を位置
に対して行った結果を求めよ。
解答例
変換後の位置 $\mathbf{r}'$ は
である
(下図参考)。
剛体変換行列
剛体変換を一つの行列によって表すことが可能である。
そのためには、物体の位置
$ \mathbf{r} $ を用いて、ベクトル
を定義する。$\overline{ \mathbf{r} } $ は 4 成分あるベクトルであり、
第 1 から第 3 成分までが位置を表し、
第 4 成分の値が $1$ である。
これに対して回転行列 $R$ と並進ベクトル $\mathbf{t}$ によって定義される
$4 \times 4$ の行列
を掛けると、
剛体変換が得られる (下の解説を参考) 。
この行列を
剛体変換行列
(rigid transformation matrix: RTM) という。
解説
回転行列 $R$ の各成分を $R_{ij}$ $(i,j=1,2,3)$ とし、
並進ベクトル $\mathbf{t}$ の各成分を $t_{i}$ とすると、
剛体変換行列は具体的に
と表される。これを
位置ベクトル $\mathbf{r}$ の各成分 $r_{i}$ によって定義されるベクトル
に掛けると、
が得られる。
このように $\overline{ \mathbf{r} } $ に $M$ を掛けると、
第 1 成分から第 3 成分までが、剛体変換後のベクトルになり、
第 4 成分が $1$ のベクトルになる。
このように $M$ を掛けることで
第 $3$ 成分までを剛体変換させることができる。
メリット
剛体変換行列 $M$ を用いるメリットは、
数値計算にて剛体変換を繰り返し複数回行う際に、
それぞれの剛体変換を表す剛体変換行列を順番に掛けることのみによって結果が得られることにある。
例えば、$n$ 回の剛体変換した結果を求めたい場合には、
を計算すればよい。このような計算はプログラムで実装しやすい。
一方、
変換前の状態に戻したい場合には、
変換後の結果に剛体変換行列の逆行列を掛けて、
とすればよい (
逆行列の具体的な形はこちら)。
このようにプログラマーにとって考えやすく、
実装しやすいという点が一つの剛体変換行列を用いる一つのメリットである。
理論的には剛体変換行列は同次座標を用いたときの射影変換行列の特別な場合と見なされる。
射影変換自体はコンピュータの透視投影描画で用いられる。
例2:
次の
剛体変換行列
をベクトル
に掛けると、
ベクトルの第 1 成分から第 3 成分までが剛体変換されていることを確かめよ。
解答例
となるので、
第 1 成分から第 3 成分までが
と剛体変換されている (
上の例を参考)。
剛体変換行列の逆行列
剛体変換行列
の逆行列は、
である。
ここで $T$ は行列の
転置を表す記号である。
証明
剛体転置行列
に対して、行列 $M'$ を
と定義すると、
$R$ が
直交行列 であることから、
が成り立つ
(ここで $I$ は
単位行列)。
したがって、$M'$ は逆行列である。
すなわち、
である。
補足:
$M$ から
掃き出し法や
余因子行列によって逆行列を求めても良いが、
上記の $M'$ を用いる方が既に行列の形が分かっているので、計算量が少なく済むという長所がある。