深入理解:矩阵变换的几何意义
用矩阵描述一张地图旋转
假设你正在开发一个地图或游戏系统。
地图上有一个玩家,原来的坐标是:
现在,我们把整个地图逆时针旋转 。
我们的问题是:
玩家旋转之后的坐标是多少?为什么旋转矩阵的两列,就可以决定整个地图的变化?
第一步:先别管玩家,观察坐标系
把地图想象成一张坐标纸。
在二维坐标系中,我们有两个最基本的方向:
玩家的位置 ,其实并不神秘。
它真正表达的是:
也就是说:
从原点出发,沿着 方向走 步,再沿着 方向走 步。
因此:
第二步:把整个地图逆时针旋转
现在,我们把整个坐标系逆时针旋转 。
这时候,我们其实不需要观察地图上的每一个点。
只需要观察两个最基本的方向。
问题 1:原来的向右方向去哪了?
原来的
逆时针旋转 后变成:
也就是:
问题 2:原来的向上方向去哪了?
原来的
逆时针旋转 后变成:
也就是:
第三步:由两个基向量的落点构造矩阵
现在关键来了。
我们已经知道:
以及:
那么,把这两个变换后的基向量按列放进矩阵:
也就是:
这就是逆时针旋转 的矩阵。
为什么可以这样构造?
因为矩阵的第 列就是:
也就是:
原来的 经过变换后去了哪里。
而矩阵的第 列就是:
也就是:
原来的 经过变换后去了哪里。
所以:
矩阵并不是凭空出现的。
它其实只是在记录:
“坐标系最基本的两个方向,经过这个变换以后分别去了哪里。”
第四步:现在再处理玩家
玩家原来的位置是:
旋转以后,由于旋转是一个线性变换,所以:
利用线性变换的性质:
我们已经知道:
以及:
因此:
分别计算:
最终得到:
所以玩家的坐标从:
变成:
第五步:为什么只知道两个基向量,就能决定整个地图?
这其实是整个例子最重要的地方。
玩家原来的位置:
本质上是由两个基向量组合出来的。
如果我们知道:
以及:
那么玩家自然就会变成:
经过变换:
也就是说:
我们不需要知道地图上无数个点分别怎么移动。
只需要知道两个基向量怎么移动,所有点的变化就都确定了。
例如:
旋转之后:
同样地:
旋转之后:
你会发现,所有点都遵循同一个规则。
最核心的理解
所以以后看到一个矩阵:
不要只是把它看成“四个数字”。
应该把它看成:
其中:
是第一个基向量 经过变换后的落点,
而:
是第二个基向量 经过变换后的落点。
对于任意向量:
假设矩阵 的列向量为:
那么矩阵乘法:
本质上就是用向量 中的各个分量作为权重,对矩阵的各列进行线性组合:
也就是说:
向量 中的 ,表示第 个基向量在原坐标系中的权重;而矩阵的第 列 ,则是第 个基向量经过线性变换后的新位置。