我在通俗解释的基础上,适当融入数学公式,帮助你在直观和数学之间建立桥梁。公式只是辅助工具,重点还是理解背后的逻辑。
矩阵变换通俗解释 + 数学公式
1. 缩放(放大/缩小)
-
通俗解释:
假设你有一张图片,双指放大时,每个像素点的位置都会被拉伸。比如原图上的点(2,3)
,放大2倍后变成(4,6)
。 -
数学公式:
用缩放矩阵乘以坐标向量:
[ s x 0 0 s y ] [ x y ] = [ s x ⋅ x s y ⋅ y ] \begin{bmatrix} s_x & 0 \\ 0 & s_y \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} s_x \cdot x \\ s_y \cdot y \end{bmatrix} [sx00sy][xy]=[sx⋅xsy⋅y]- 例子:放大2倍( s x = 2 , s y = 2 s_x=2, s_y=2 sx=2,sy=2):
[ 2 0 0 2 ] [ 2 3 ] = [ 4 6 ] \begin{bmatrix} 2 & 0 \\ 0 & 2 \end{bmatrix} \begin{bmatrix} 2 \\ 3 \end{bmatrix} = \begin{bmatrix} 4 \\ 6 \end{bmatrix} [2002][23]=[46]
2. 旋转(调整方向)
-
通俗解释:
把手机里的照片旋转90度,每个像素的位置会被重新计算。比如点(1,0)
逆时针转90度后变成(0,1)
。 -
数学公式:
用旋转矩阵乘以坐标向量( θ \theta θ 是旋转角度):
[ cos θ − sin θ sin θ cos θ ] [ x y ] = [ x cos θ − y sin θ x sin θ + y cos θ ] \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} x \cos\theta - y \sin\theta \\ x \sin\theta + y \cos\theta \end{bmatrix} [cosθsinθ−sinθcosθ][xy]=[xcosθ−ysinθxsinθ+ycosθ]- 例子:旋转90度( θ = 9 0 ∘ \theta=90^\circ θ=90∘, cos 9 0 ∘ = 0 \cos90^\circ=0 cos90∘=0, sin 9 0 ∘ = 1 \sin90^\circ=1 sin90∘=1):
[ 0 − 1 1 0 ] [ 1 0 ] = [ 0 1 ] \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 0 \\ 1 \end{bmatrix} [01−10][10]=[01]
- 例子:旋转90度( θ = 9 0 ∘ \theta=90^\circ θ=90∘, cos 9 0 ∘ = 0 \cos90^\circ=0 cos90∘=0, sin 9 0 ∘ = 1 \sin90^\circ=1 sin90∘=1):
3. 平移(移动位置)
-
通俗解释:
把地图上的点从(1,2)
向右移动3个单位,向上移动4个单位,变成(4,6)
。 -
数学公式:
平移需要用到齐次坐标(增加一个维度)和扩展矩阵:
[ 1 0 t x 0 1 t y 0 0 1 ] [ x y 1 ] = [ x + t x y + t y 1 ] \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} x + t_x \\ y + t_y \\ 1 \end{bmatrix} 100010txty1 xy1 = x+txy+ty1 - 例子:向右移3,向上移4( t x = 3 , t y = 4 t_x=3, t_y=4 tx=3,ty=4):
[ 1 0 3 0 1 4 0 0 1 ] [ 1 2 1 ] = [ 4 6 1 ] \begin{bmatrix} 1 & 0 & 3 \\ 0 & 1 & 4 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 \\ 2 \\ 1 \end{bmatrix} = \begin{bmatrix} 4 \\ 6 \\ 1 \end{bmatrix} 100010341 121 = 461
- 例子:向右移3,向上移4( t x = 3 , t y = 4 t_x=3, t_y=4 tx=3,ty=4):
组合变换:先旋转后平移
-
通俗解释:
游戏角色先转身(旋转),再向前跑(平移)。矩阵可以合并成一个“组合技”。 -
数学公式:
通过矩阵乘法合并两个变换矩阵(注意顺序!):
总矩阵 = 平移矩阵 × 旋转矩阵 \text{总矩阵} = \text{平移矩阵} \times \text{旋转矩阵} 总矩阵=平移矩阵×旋转矩阵- 例子:先旋转90度,再平移(3,4):
[ 1 0 3 0 1 4 0 0 1 ] × [ 0 − 1 0 1 0 0 0 0 1 ] = [ 0 − 1 3 1 0 4 0 0 1 ] \begin{bmatrix} 1 & 0 & 3 \\ 0 & 1 & 4 \\ 0 & 0 & 1 \end{bmatrix} \times \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} 0 & -1 & 3 \\ 1 & 0 & 4 \\ 0 & 0 & 1 \end{bmatrix} 100010341 × 010−100001 = 010−100341 - 对点
(1,0)
应用组合变换:
[ 0 − 1 3 1 0 4 0 0 1 ] [ 1 0 1 ] = [ ( 0 ⋅ 1 ) + ( − 1 ⋅ 0 ) + 3 ⋅ 1 ( 1 ⋅ 1 ) + ( 0 ⋅ 0 ) + 4 ⋅ 1 1 ] = [ 3 5 1 ] \begin{bmatrix} 0 & -1 & 3 \\ 1 & 0 & 4 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \\ 1 \end{bmatrix} = \begin{bmatrix} (0 \cdot 1) + (-1 \cdot 0) + 3 \cdot 1 \\ (1 \cdot 1) + (0 \cdot 0) + 4 \cdot 1 \\ 1 \end{bmatrix} = \begin{bmatrix} 3 \\ 5 \\ 1 \end{bmatrix} 010−100341 101 = (0⋅1)+(−1⋅0)+3⋅1(1⋅1)+(0⋅0)+4⋅11 = 351
最终坐标是(3,5)
,即先旋转到(0,1)
,再平移(3,4)
。
- 例子:先旋转90度,再平移(3,4):
为什么需要矩阵?
- 统一规则:所有变换(旋转、平移、缩放)都可以写成矩阵形式。
- 高效计算:计算机只需做矩阵乘法,就能一次性处理所有点。
- 组合方便:复杂动作(如“旋转+平移+缩放”)可以合并成一个矩阵。
现实应用中的公式
1. 3D游戏中的视角变换
- 用投影矩阵将3D坐标转换为2D屏幕坐标:
屏幕坐标 = 投影矩阵 × 视角矩阵 × 模型矩阵 × 原始坐标 \text{屏幕坐标} = \text{投影矩阵} \times \text{视角矩阵} \times \text{模型矩阵} \times \text{原始坐标} 屏幕坐标=投影矩阵×视角矩阵×模型矩阵×原始坐标
2. 图像压缩(JPEG)
- 用离散余弦变换(DCT)矩阵压缩图像:
压缩数据 = DCT矩阵 × 像素矩阵 × DCT矩阵 T \text{压缩数据} = \text{DCT矩阵} \times \text{像素矩阵} \times \text{DCT矩阵}^T 压缩数据=DCT矩阵×像素矩阵×DCT矩阵T
总结
- 矩阵是变换的“配方表”,公式告诉你如何调整每个点的坐标。
- 实际应用:从手机修图到3D游戏,背后都是矩阵在默默计算。
- 公式的意义:把直观的“放大”“旋转”等操作,翻译成计算机能执行的数学语言。
下次放大手机照片时,可以想象背后的矩阵正在拉伸每一个像素!😊