座標変換1
二次元座標系の取扱方法について理解しよう.
今回,数学的には二次元の話.
ただし,概念的には三次元にも通用.
教科書の該当範囲:第2章
座標系(coordinate system)
モデリングにおいて,位置ベクトル等の設定の際,何を基準にするか?
ある座標系で定義された図形を別の座標系へ移動・再配置したりもします.
アフィン変換(affine transform)
英語:transform でも transformation でも OK.
図形の位置・姿勢・形状・等の変更操作の数学的表現.
- アフィン変換の一般形:
\( \V{p}' = A \ \V{p} + \V{b} \)
- \( \V{p} \):変換前の位置ベクトル,等
- \( \V{p}' \):変換後の位置ベクトル,等
- \( A \):拡大,回転,等の変換行列(transform matrix)
- \( \V{b} \):平行移動の変位ベクトル(displacement vector)
- 幾何変換(geometric trans...):同一の座標系内での変換
例:標準タイヤを \( s \) 倍に拡大し,大形タイヤを作成:\( \V{p}' = s \V{p} \)
なお,この例では,原点をタイヤの中心に設定していますよ.
要するに,タイヤのモデル座標系における座標の変換.
- 座標変換(coordinate ...):複数の座標系間での変換
例:タイヤを自動車本体の位置 \( \V{d} \) に取付:\( \V{p}'' = \V{p}' + \V{d} \)
この例では,原点を自動車本体のどこかに設定していますよ.
タイヤの原点を移動・再配置しています.
要するに,タイヤのモデル座標系から自動車本体のモデル座標系への変換.
座標を変えるという意味では,
幾何変換も座標変換も同じことですね.
どちらも,数学的にはアフィン変換.
一次変換とか線形写像の仲間.
二次元アフィン変換の例
二次元におけるアフィン変換 \( \V{p}' = A \V{p} + \V{b} \) の具体例.
- 平行移動(translation):
\[ \Mat{x' \\ y'} = \Mat{x + d_x \\ y + d_y} = \Mat{x \\ y} + \Mat{d_x \\ d_y} \]
ベクトル表現 ⏩ \( \V{p}' = \V{p} + \V{d} \)
, \( \V{d} \):変位ベクトル,平行移動量
行列 \(A\) 相当のものがないってか?
(見えないけど)単位行列があるじゃないか.
- 拡大・縮小(scaling):
原点を基準とする拡大・縮小ですよ.
座標系の設定によっては,図形全体の位置がズレる可能性もあります.
- 回転(rotation):
\[ \Mat{x' \\ y'}
= \Mat{x \cos\theta - y \sin\theta \\ x \sin\theta + y \cos\theta}
= \Mat{\cos\theta & -\sin\theta \\ \sin\theta & \cos\theta} \Mat{x \\ y} \]
⏩ \( \V{p}' = R(\theta) \ \V{p} \)
, \( R(\theta) \):回転行列 , \( \theta \):回転角度
原点を中心とする反時計回りな回転ですよ.
二次元の回転は1種類だけですが,
三次元では各軸方向3種類の回転が出てきますよ.
(次回予告)
以上,POV-Ray の変換命令 translate,scale,rotate の計算方法の解説でした.
合成変換(composite transform)
複数個のアフィン変換 \( A_k \V{p} + \V{b}_k \) を連続的・階層的に適用しますよ.
例えば,小部品を作り,それらを組み合わせて中部品を作り,それらを...,...世界全体を完成.
以前に実習しましたね.
合成変換の適用・記述の順序に注意.
本科目では列ベクトル方式を採用しているので,
各変換行列を適用順に,右側から左側へ向けて記述して行くんですよ.
(数式を左から見ると,適用順とは逆.)
同次座標(homogeneous coordinate)
平行移動も行列の積で表現してしまえ!!
どうやって?
- 同次座標への変換:二次元標準座標系 \(\Coord{x, y}\)
→ 三次元同次座標系 \(\Coord{X, Y, W}\)
\[ \V{p} = \Mat{x \\ y}
\quad \longrightarrow \quad
\V{P} = \Mat{X \\ Y \\ W}
= \Mat{x \\ y \\ 1} \]
- \( \V{P} \):同次座標の位置ベクトル
- \( \V{p} \):標準座標(通常座標)の位置ベクトル
- 標準座標への逆変換:
三次元同次座標系 \(\Coord{X, Y, W}\)
→ 二次元標準座標系 \(\Coord{x, y}\)
\[ \V{P} = \Mat{X \\ Y \\ W}
\quad \longrightarrow \quad
\V{p} = \Mat{X/W \\ Y/W} = \Mat{x \\ y} \]
座標 \( W \) の値はゼロ以外なら何でもOK.
大抵は簡単のため,\( W = 1 \) としておく.
- 平行移動の同次座標化:
\[ \Mat{x' \\ y'} = \Mat{x + d_x \\ y + d_y} = \Mat{x \\ y} + \Mat{d_x \\ d_y}
\quad \longrightarrow \quad
\Mat{X' \\ Y' \\ W'}
= \Mat{x + d_x \\ y + d_y \\ 1}
= \Mat{1 & 0 & d_x \\ 0 & 1 & d_y \\ 0 & 0 & 1} \Mat{x \\ y \\ 1} \]
⏩ \( \V{p}' = \V{p} + \V{d} \quad \longrightarrow \quad \V{P}' = T(d_x , d_y) \V{P} \)
ベクトルの和 → 行列の積.
表現できちゃったよ♫
アフィン変換の回数が多くても低コストで済みますね.
- アフィン変換の同次座標化:
\[ \V{p}' = A \ \V{p} + \V{b}
\quad \longrightarrow \quad
\V{P}' = A^+ \ \V{P} \]
⏩ \( A^+ = \Mat{A & \V{b} \\ \V{0}^{\mathrm T} & 1} \):拡大変換行列(augmented transform matrix)
今後は,この拡大変換行列 \( A^+ \) のことを,
改めて,単に「変換行列」と呼んだり,
「\( A \)」と記したりもしますよ.
この同次座標とか,
複素数(電気電子工学で利用したフェーザ法)とかも同様ですが,
問題を冗長・複雑化しているように見えて,
実際には単純・効率化しているんですね.
これぞテクノロジーですね.
初期投資によって大きな利益を生み出せるんですね.
逆に,楽するためには苦労が必要なんですね.
つらかった高専での学習が,
皆さんの今後の生活のため,
有効な投資となっていたなら吉.