仿射变换

元气小坏坏 提交于 2019-12-04 09:42:23

什么是仿射变换?

仿射变换定义为一个线性变换加上平移变换。即:
\[ g(\vec v) = f(\vec v) + \vec b \]

仿射变换的矩阵表示

\[ g(\vec v) = [x, y, z] \cdot \begin{bmatrix} f(\vec i) \\ f(\vec j) \\ f(\vec k) \end{bmatrix} + \vec b \]

这里,我们要对向量\(\vec v = (x, y, z)\)转换为齐次坐标\((x,y,z,w)\),同样变换后的\(g(\vec v) = (x', y', z', w)\)也是齐次坐标。从而有:
\[ \begin{align*} g(\vec v) &= [x, y, z, w] \cdot \begin{bmatrix} f(\vec i) & 0 \\ f(\vec j) & 0 \\ f(\vec k) & 0 \\ 0 & 0 \end{bmatrix} + [x, y, z, w] \cdot \begin{bmatrix} 0 & 0 \\ 0 & 0 \\ 0 & 0 \\ \vec b & 1 \end{bmatrix} \\ &= [x, y, z, w] \cdot \begin{bmatrix} f(\vec i) & 0 \\ f(\vec j) & 0 \\ f(\vec k) & 0 \\ \vec b & 1 \end{bmatrix} \end{align*} \]
对于向量而言,\(w\)分量为0,因为平移对向量不起作用,对于点而言,\(w\)分量为1。

坐标系变换

在实际运用中经常遇到一个向量或者一个点在不同坐标系下的坐标表示。先来看看向量的情形:

对于向量\(\vec v\),它在坐标系\(A\)下的坐标为\((x, y, z)\),求在坐标系\(B\)下的坐标\((x', y', z')\)

实际上,无论坐标系如何变化,向量自身是不变的,那么我们有:
\[ \vec v = x'\vec i_B + y'\vec j_B + z'\vec k_B = x\vec i_A + y\vec j_A + z\vec k_A \]
写成矩阵形式:
\[ [x',y',z'] = [x,y,z] \cdot \begin{bmatrix} \vec i_A \\ \vec j_A \\ \vec k_A \end{bmatrix} \]
其中,\(\vec i_A,\vec j_A,\vec k_A\)是坐标系\(A\)的基向量在坐标系\(B\)的表示。类似地,反过来也可以得到:
\[ [x,y,z] = [x',y',z'] \cdot \begin{bmatrix} \vec i_B \\ \vec j_B \\ \vec k_B \end{bmatrix} \]
其中,\(\vec i_B,\vec j_B,\vec k_B\)是坐标系\(B\)的基向量在坐标系\(A\)的表示。这里,可以发现一个有趣的现象:坐标系\(A\)的基向量在坐标系\(B\)的矩阵表示乘以坐标系\(B\)的基向量在坐标系\(A\)的矩阵表示得到的是单位矩阵。即:
\[ \begin{bmatrix} \vec i_A \\ \vec j_A \\ \vec k_A \end{bmatrix} \cdot \begin{bmatrix} \vec i_B \\ \vec j_B \\ \vec k_B \end{bmatrix} = I \]
我们可以用三角函数的方法去证明它。

然后我们来看看点的情形。对于点\(\vec p\),它在坐标系\(A\)下的坐标为\((x, y, z)\),求在坐标系\(B\)下的坐标\((x', y', z')\)。容易知道结果是类似的:
\[ \vec p = x'\vec i_B + y'\vec j_B + z'\vec k_B + \vec o_B = x\vec i_A + y\vec j_A + z\vec k_A + \vec o_A \]
其中\(o\)为坐标系的原点坐标。写成矩阵形式:
\[ [x',y',z', 1] = [x,y,z, 1] \cdot \begin{bmatrix} \vec i_A & 0 \\ \vec j_A & 0 \\ \vec k_A & 0 \\ \vec o_A & 1 \end{bmatrix} \]
其中,\(\vec i_A,\vec j_A,\vec k_A, \vec o_A\)是坐标系\(A\)的基向量和原点在坐标系\(B\)的表示。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!