理解“矩阵是用来描述空间变换的”


前言

笔者初次阅读《3D数学基础:图形学与游戏开发》关于矩阵的几何意义的介绍时,仍带着困惑,为什么“矩阵是用来描述空间变换的”?最近趁闲再阅读这一章节,突然茅塞顿开,感觉思路通畅了,宛如龙场悟道。故作此文输出一下我的看法。


矩阵是用来描述坐标空间变换的

假设我们有一个矢量\((x,y,z)\)(一个三维矢量),还有一个矩阵A(我使用方括号包裹,你可以看到其他人使用圆括号包裹)

A = \( \begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{bmatrix} \)

一个三维行矢量,可以左乘一个3 X 3的矩阵,因为行矢量是1 X 3的,它左乘矩阵得到的仍是一个行矢量。

你应该记得,矩阵之间的乘法是如何进行的。若称新矩阵的第i行第j列元素为\(m_{ij}\),那么\(m_{ij}\)等于左边的矩阵的第i行的矢量与右边的矩阵的第j列的矢量的点积。上面举的例子的结果如下:

\( \begin{bmatrix} m_{11}x+m_{21}y+m_{31}z & m_{12}x+m_{22}y+m_{32}z & m_{13}x+m_{23}y+m_{33}z \end{bmatrix} \)

请问一个问题:这个矩阵对矢量做了什么?还记得我刚刚提的矩阵之间的乘法是如何进行的吗?我提到了点积。新的行矢量的x轴坐标记为x',那么x'是怎么来的?——是由矢量\((x,y,z)\)与矢量\( \begin{bmatrix} m_{11} & m_{21} & m_{31} \end{bmatrix}\)点积得到的结果。

同理,新的行矢量的y轴坐标记为y',那么y'是怎么来的?——是由矢量\((x,y,z)\)与矢量\( \begin{bmatrix} m_{12} & m_{22} & m_{32} \end{bmatrix} \)点积得到的结果。

新的行矢量的z轴坐标记为z',那么z'是怎么来的?——是由矢量\((x,y,z)\)与矢量\( \begin{bmatrix} m_{13} & m_{23} & m_{33} \end{bmatrix} \)点积得到的结果。

点积的结果是什么,是一个数值,而不是向量。实际上新的向量应该是:

\( \begin{bmatrix} m_{11}x+m_{21}y+m_{31}z & m_{12}x+m_{22}y+m_{32}z & m_{13}x+m_{23}y+m_{33}z \end{bmatrix} = ( m_{11}x+m_{21}y+m_{31}z ) \mathbf{i} + ( m_{12}x+m_{22}y+m_{32}z ) \mathbf{j} + ( m_{13}x+m_{23}y+m_{33}z ) \mathbf{k} \)

前面讲述这么多,其实是为接下来要讲述的内容作铺垫。
\((x,y,z)\)这个矢量可以用基矢量表示:\(x\mathbf{i}+y\mathbf{j}+z\mathbf{k}\)。
\(i,j,k\)为立体直角坐标系的基矢量,原本的矢量\((x,y,z)\)是在以\(i,j,k\)为基矢量的空间(即立体直角坐标系)中的,当矢量左乘矩阵A后,新的矢量\((x',y',z')\)是在以\( \mathbf{i}A, \mathbf{j}A, \mathbf{k}A\)为基矢量的空间(经过线性变换后的新空间)中的。即以\( (m_{11},m_{12},m_{13}). (m_{21},m_{22},m_{23},(m_{31},m_{32},m_{33}))\)为基矢量的空间。你Get到我的意思了吗?

实际上,行矢量左乘矩阵后,基矢量变了,空间也变了。如果你把经过变化的矢量放在原本的空间中观察,由于矩阵的不同,你可能能观察到这个矢量发生了旋转、缩放等变换。接下来我将用手绘制一张极其粗略的草图解释,希望能够加深读者的印象。

0.png

草图

在此我需要说明,草图中变换后的基矢量是我随意取的,因为矩阵的各行各列的元素我也没有赋予值。我想表达的就是:矩阵表示一个空间变换。


总结

行矢量左乘矩阵,改变了行矢量原本处在的坐标空间的基矢量,进而改变了坐标空间(注意:原点还是那个原点),表明该运算的效果是产生空间变换。