一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
拉伸一个三维向量
问题的数学描述
我们有一个三维向量:⎝⎛xyz⎠⎞, 我们现在想要:
- x 变成 ax
- y 变成 bx
- z 变成 cx
问题就是:找到一个矩阵 T 使得: T * ⎝⎛xyz⎠⎞ = ⎝⎛axbycz⎠⎞。
得到拉伸矩阵 T
也就是说,不管x,y,z取什么值,这个等式都要成立才行。
我们知道,T 是一个 3∗3 的矩阵,也就是有9个未知数。
这个解貌似很难得到。
但是矩阵理论里有一个额外的定理:
如果你确定 T 是一个线性变换 , 那么:
-
T 的第一列 就等于: T * ⎝⎛100⎠⎞ = ⎝⎛a00⎠⎞
-
T 的第二列 就等于: T * ⎝⎛010⎠⎞ = ⎝⎛0b0⎠⎞
-
T 的第三列 就等于: T * ⎝⎛001⎠⎞ = ⎝⎛00c⎠⎞
至此,就完全得出来了:
T=⎣⎡a000b000c⎦⎤。
即:
⎣⎡a000b000c⎦⎤∗⎝⎛xyz⎠⎞=⎝⎛axbycz⎠⎞
不信试验一下,随便取一个 ⎝⎛xyz⎠⎞=⎝⎛234⎠⎞。
经过矩阵乘法口算:T=⎣⎡a000b000c⎦⎤ * ⎝⎛234⎠⎞ = ⎝⎛2a3b4c⎠⎞。验证完毕。
注意:拉伸变换是一个线性变换这件事,你得提前知道。
简介线性变换
先回顾一下,向量数乘的概念,就是把向量的所有元素全部乘以一个数值k。
比如说:
k∗⎝⎛xyz⎠⎞ = ⎝⎛kxkykz⎠⎞
满足数乘性质
现在假设一个变换T,任意一个向量 x, 下面给出线性变换的第一个基本要求:
- x,先数乘k,再经过T的变换,得到
结果1
- x,先经过T的变换, 再数乘 k, 得到
结果2
如果 结果1 = 结果2, 则满足这个要求。
用拉伸来讲解一下:
就是说一个向量,一个拉伸矩阵T,有
- 先拉伸T,再数乘k, 得到
结果1
- 先数乘k,再拉伸T, 得到
结果2
此时,这两个结果,无论对于什么向量,都是满足的。
满足加法性质
我们知道两个向量加法很简单:
⎝⎛x1y1z1⎠⎞+⎝⎛x2y2z2⎠⎞=⎝⎛x1+x2y1+y2z1+z2⎠⎞
假设一个变换T,线性变换的加法性质,也是两个过程,结果对比一致:
- 两个任意向量先加起来,在经过T,得到
结果1
- 两个向量先各自经过T,再加起来,得到
结果2
此时要求 结果1 = 结果2。
我们可以根据以上,两个简单的性质,来判断一个变换是否是线性变换。