動画の解説を参照
前回は回転行列を使って点 (もしくは位置ベクトル) を回転させる方法についてみましたが、平面上での単純な平行移動、たとえば
\(x'=x+3\)
\(y'=y+5\)
のような変換はそのままでは行列では表せません。
そこで、平面上の点に対応する列ベクトルに3行目の値「1」を付け加えて以下のようにしてみます。これを
同次表現といいます。
\(
\boldsymbol{r}
\equiv\begin{pmatrix}
x \\
y \\
1
\end{pmatrix}
\)
\(
\boldsymbol{r}'
\equiv\begin{pmatrix}
x' \\
y' \\
1
\end{pmatrix}
\)
こうすると、\(x'=x+3\), \(y'=y+5\) という変換は以下のように行列と列ベクトルの積で表せるようになります。
\(
\begin{pmatrix}
x' \\
y' \\
1
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 & 3\\
0 & 1 & 5\\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x \\
y \\
1
\end{pmatrix}
\)
一般的に書くと、「ある点を \(x\) 方向に \(t_x\), \(y\) 方向に \(t_y\) 移動させる」という変換を表す行列は
\(
\begin{pmatrix}
1 & 0 & t_x\\
0 & 1 & t_y\\
0 & 0 & 1
\end{pmatrix}
\)
となります。
一方、原点を中心とした反時計回り \(\theta\) の回転を表す行列は以下のように書けます。
\(
\begin{pmatrix}
\cos\theta & -\sin\theta & 0\\
\sin\theta & \cos\theta & 0\\
0 & 0 & 1
\end{pmatrix}
\)
これらはどちらも
同次座標変換行列と言います。
平行移動と回転の変換行列を組み合わせれば、原点以外の点を中心とした回転を行うこともできます。
例えば \((t_x, t_y)\) を中心とした反時計回り \(\theta\) の回転は
- \((-t_x, -t_y)\) の平行移動
- 原点を中心とした反時計回り \(\theta\) の回転
- \((t_x, t_y)\) の平行移動
を順に行えば得られます。
それぞれの変換は
\(
\begin{pmatrix}
x' \\
y' \\
1
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 & -t_x\\
0 & 1 & -t_y\\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x \\
y \\
1
\end{pmatrix}
\)
\(
\begin{pmatrix}
x'' \\
y'' \\
1
\end{pmatrix}
=
\begin{pmatrix}
\cos\theta & -\sin\theta & 0\\
\sin\theta & \cos\theta & 0\\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x' \\
y' \\
1
\end{pmatrix}
\)
\(
\begin{pmatrix}
x''' \\
y''' \\
1
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 & t_x\\
0 & 1 & t_y\\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x'' \\
y'' \\
1
\end{pmatrix}
\)
なので、
\(
\begin{pmatrix}
x''' \\
y''' \\
1
\end{pmatrix}
\)
\(
=
\begin{pmatrix}
1 & 0 & t_x\\
0 & 1 & t_y\\
0 & 0 & 1
\end{pmatrix}
\)
\(
\begin{pmatrix}
\cos\theta & -\sin\theta & 0\\
\sin\theta & \cos\theta & 0\\
0 & 0 & 1
\end{pmatrix}
\)
\(
\begin{pmatrix}
1 & 0 & -t_x\\
0 & 1 & -t_y\\
0 & 0 & 1
\end{pmatrix}
\)
\(
\begin{pmatrix}
x \\
y \\
1
\end{pmatrix}
\)
\(
=
\begin{pmatrix}
\cos\theta & -\sin\theta & t_x\\
\sin\theta & \cos\theta & t_y\\
0 & 0 & 1
\end{pmatrix}
\)
\(
\begin{pmatrix}
1 & 0 & -t_x\\
0 & 1 & -t_y\\
0 & 0 & 1
\end{pmatrix}
\)
\(
\begin{pmatrix}
x \\
y \\
1
\end{pmatrix}
\)
\(
=
\begin{pmatrix}
\cos\theta & -\sin\theta & - t_x\cos\theta + t_y\sin\theta + t_x\\
\sin\theta & \cos\theta & - t_x\sin\theta-t_y\cos\theta + t_y\\
0 & 0 & 1
\end{pmatrix}
\)
\(
\begin{pmatrix}
x \\
y \\
1
\end{pmatrix}
\)
つまり、「\((t_x, t_y)\) を中心とした反時計回り \(\theta\) の回転」は
\(
\begin{pmatrix}
\cos\theta & -\sin\theta & - t_x\cos\theta + t_y\sin\theta + t_x\\
\sin\theta & \cos\theta & - t_x\sin\theta-t_y\cos\theta + t_y\\
0 & 0 & 1
\end{pmatrix}
\)
という行列で表されます。移動後の座標はそれぞれ
\(x''' = x\cos\theta-y\sin\theta\)
\( - t_x\cos\theta + t_y\sin\theta+ t_x\)
\(y''' = x\sin\theta+y\cos\theta\)
\(- t_x\sin\theta-t_y\cos\theta+t_y\)
となります。これは少し変形すれば
\(x''' = (x-t_x)\cos\theta-(y-t_y)\sin\theta+t_x\)
\(y''' = (x-t_x)\sin\theta+(y-t_y)\cos\theta+t_y\)
とも書けます。
※ 準備 : 学籍番号を入れて「入力」をクリック (タップ) してください。
点 (
) を、点 (
) を中心として反時計回りに
°
回転させた場合の移動先の座標を求めてください。
導出過程も書き、結果は四捨五入して小数第2位までにしてください。
※ 「真・関数電卓」では、解説動画の問題文ならそれぞれ「-4×cos(264)-6×sin(264)+3」「-4×sin(264)+6×cos(264)-1」と入力すれば正確に計算できます。
課題1ヒント
※ この動画で入れ忘れていましたが、最後に「よって、移動先の座標は ( , ) のように、問いに対する答えを明記してください。
動画の解説を参照
たとえばこのような図形を、原点を中心として2倍に拡大すると

それぞれの頂点の \(x\)座標、\(y\) 座標はどちらも2倍になります。

横に1.5倍、縦に2.5倍のように非等方に拡大すると、\(x\)座標、\(y\) 座標はそれぞれの倍率に応じた係数がかかった値になります。
一般的に、「原点を中心として \(x\) 方向に \(s_x\) 倍、\(y\) 方向に \(s_y\) 倍に拡大する」という変換は、変換前の座標を \((x, y)\), 変換後の座標を \((x', y')\)
とすると
\(x' = s_x x\)
\(y' = s_y y\)
のようになります。これは、同次表現の列ベクトルと行列で
\(
\begin{pmatrix}
x' \\
y' \\
1
\end{pmatrix}
=
\begin{pmatrix}
s_x & 0 & 0\\
0 & s_y & 0\\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x \\
y \\
1
\end{pmatrix}
\)
と書けます。これも同次座標変換行列です。平行移動と組み合わせれば、任意の点を中心としたスケール変換も考えられます。
例えば「\((t_x, t_y)\) を中心とした\(x\) 方向に \(s_x\) 倍、\(y\) 方向に \(s_y\) 倍のスケール変換」は
- \((-t_x, -t_y)\) の平行移動
- 原点を中心とした\(x\) 方向に \(s_x\) 倍、\(y\) 方向に \(s_y\) 倍のスケール変換
- \((t_x, t_y)\) の平行移動
の組み合わせで表せます。前項と同様に考えれば、この変換行列は
\(
\begin{pmatrix}
1 & 0 & t_x\\
0 & 1 & t_y\\
0 & 0 & 1
\end{pmatrix}
\)
\(
\begin{pmatrix}
s_x & 0 & 0\\
0 & s_y & 0\\
0 & 0 & 1
\end{pmatrix}
\)
\(
\begin{pmatrix}
1 & 0 & -t_x\\
0 & 1 & -t_y\\
0 & 0 & 1
\end{pmatrix}
\)
\(=
\begin{pmatrix}
s_x & 0 & (1-s_x)t_x\\
0 & s_y & (1-s_y)t_y\\
0 & 0 & 1
\end{pmatrix}
\)
となるので、点 \((x, y)\) のこの変換による移動先 \((x', y')\) は
\(x' = s_x x + (1-s_x)t_x\)
\(y' = s_y y + (1-s_y)t_y\)
になることがわかります。これは少し変形すれば
\(x' = s_x (x-t_x) + t_x\)
\(y' = s_y (y-t_y) + t_y\)
とも書けます。
(
) を中心として、\(x\) 方向に
倍、\(y\) 方向に
倍のスケール変換をかけた場合の (
) の移動先の点の座標を求めてください。
導出過程も書いてください。
※ 問題文が正しく表示されていない場合は課題1で学籍番号を入力して「入力」をクリック (タップ) してください。
課題2ヒント
動画の解説を参照
同次表現を使うと平面図形で平行移動・回転・スケール変換を3行3列の同次座標変換行列で扱えるようになりました。
3次元でも同様にして、平行移動・回転・スケール変換を4行4列の同次座標変換行列で扱うことができます。
座標 \(x, y, z\) にある点を4行1列の列ベクトル
\(
\boldsymbol{r}
\equiv\begin{pmatrix}
x \\
y \\
z \\
1
\end{pmatrix}
\)
で表すことにすれば、「ある点を \(x\) 方向に \(t_x\), \(y\) 方向に \(t_y\), \(z\) 方向に \(t_z\) 移動させる」という変換、つまり平行移動は
\(
\begin{pmatrix}
x' \\
y' \\
z' \\
1
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 & 0 & t_x\\
0 & 1 & 0 & t_y\\
0 & 0 & 1 & t_z\\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x \\
y \\
z \\
1
\end{pmatrix}
\)
となります (\((x', y', z')\) は移動先の座標です)。
回転も同様です。\(x\) 軸を中心として反時計まわりに \(\phi\) 回転させる変換は
\(
\begin{pmatrix}
x' \\
y' \\
z' \\
1
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 & 0 & 0\\
0 & \cos\phi & -\sin\phi & 0\\
0 & \sin\phi & \cos\phi & 0\\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x \\
y \\
z \\
1
\end{pmatrix}
\)
\(y\)軸を中心として反時計まわりに \(\psi\) 回転させる変換は
\(
\begin{pmatrix}
x' \\
y' \\
z' \\
1
\end{pmatrix}
=
\begin{pmatrix}
\cos\psi & 0 & \sin\psi & 0\\
0 & 1 & 0 & 0\\
-\sin\psi & 0 & \cos\psi & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x \\
y \\
z \\
1
\end{pmatrix}
\)
\(z\)軸を中心として反時計まわりに \(\theta\) 回転させる変換は
\(
\begin{pmatrix}
x'\\
y'\\
z'\\
1
\end{pmatrix}
=\begin{pmatrix}
\cos\theta & -\sin\theta & 0 & 0\\
\sin\theta & \cos\theta & 0 & 0\\
0 & 0 & 1 & 0\\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x\\
y\\
z\\
1
\end{pmatrix}
\)
となります。
スケール変換も同様で、「原点を中心として \(x\) 方向に \(s_x\) 倍、\(y\) 方向に \(s_y\) 倍、\(z\) 方向に \(s_z\) 倍に拡大する」という変換は
\(
\begin{pmatrix}
x'\\
y'\\
z'\\
1
\end{pmatrix}
=\begin{pmatrix}
s_x & 0 & 0 & 0\\
0 & s_y & 0 & 0\\
0 & 0 & s_z & 0\\
0 & 0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x\\
y\\
z\\
1
\end{pmatrix}
\)
となります。
\(x, y, z\) 方向にそれぞれ \(t_x, t_y, t_z\) だけ平行移動させ、
軸を中心として反時計まわりに
回転させたあとで、
原点を中心として \(x\) 方向に \(s_x\) 倍、\(y\) 方向に \(s_y\) 倍、\(z\) 方向に \(s_z\) 倍
のスケール変換をかける処理を行ったときの、移動先の座標 \((x', y', z')\) を元の座標 \((x, y, z)\) で表した式を書いてください。導出過程も書いてください。
※ 問題文が正しく表示されていない場合は課題1で学籍番号を入力して「入力」をクリック (タップ) してください。
課題3ヒント