仿射变换

什么是仿射变换?

仿射变换定义为一个线性变换加上平移变换。即:
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的表示。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容