推导过程:
先来熟悉一些公式
- 矩阵向量乘法 [ a x b x a y b y ] [ x y ] = x [ a x a y ] + y [ b x b y ] = [ a x ∗ x + b x ∗ y a y ∗ x + b y ∗ y ] \begin{bmatrix}ax&bx\\ay&by\end{bmatrix} \begin{bmatrix}x\\y\end{bmatrix}= x\begin{bmatrix} ax\\ay \end{bmatrix}+ y\begin{bmatrix} bx\\by \end{bmatrix}= \begin{bmatrix} ax*x+bx*y\\ay*x+by*y \end{bmatrix} [axaybxby][xy]=x[axay]+y[bxby]=[ax∗x+bx∗yay∗x+by∗y]
从旋转说起
给定一个坐标[1,2],将该坐标绕原点顺时针旋转90度后得到一个新的点[2,-1]
那么初始基向量: x:[1,0] y:[0,1] 同时顺时针旋转90度后得到了两个新的基向量 fx:[0,-1] fy:[1,0]
可以得出:
1
∗
f
x
+
y
∗
f
y
=
1
[
0
−
1
]
+
2
[
1
0
]
=
[
1
∗
0
+
2
∗
1
1
∗
−
1
+
2
∗
0
]
=
[
2
−
1
]
1*fx+y*fy= 1\begin{bmatrix}0 \\ -1\end{bmatrix} + 2\begin{bmatrix}1 \\ 0\end{bmatrix} = \begin{bmatrix}1*0+2*1 \\ 1*-1+2*0\end{bmatrix} = \begin{bmatrix}2 \\ -1\end{bmatrix}
1∗fx+y∗fy=1[0−1]+2[10]=[1∗0+2∗11∗−1+2∗0]=[2−1]
那么变换矩阵应为:
[
0
1
−
1
0
]
\begin{bmatrix}0 & 1 \\ -1 & 0 \end{bmatrix}
[0−110]
公式则为:
[
0
1
−
1
0
]
[
1
2
]
=
[
1
∗
0
+
2
∗
1
1
∗
−
1
+
2
∗
0
]
=
[
2
−
1
]
\begin{bmatrix}0 & 1 \\ -1 & 0 \end{bmatrix} \begin{bmatrix} 1 \\ 2 \end{bmatrix} = \begin{bmatrix}1*0+ 2*1 \\ 1*-1 + 2*0 \end{bmatrix}= \begin{bmatrix}2 \\ -1 \end{bmatrix}
[0−110][12]=[1∗0+2∗11∗−1+2∗0]=[2−1]
同理可得 点[-3,4] 顺时针旋转90度后 应为:
[
0
1
−
1
0
]
[
−
3
4
]
=
[
−
3
∗
0
+
4
∗
1
−
3
∗
−
1
∗
+
4
∗
0
]
=
[
4
3
]
\begin{bmatrix}0 & 1 \\ -1 & 0 \end{bmatrix} \begin{bmatrix} -3 \\ 4 \end{bmatrix} = \begin{bmatrix}-3*0+ 4*1 \\ -3*-1* + 4*0 \end{bmatrix}= \begin{bmatrix}4 \\ 3 \end{bmatrix}
[0−110][−34]=[−3∗0+4∗1−3∗−1∗+4∗0]=[43]
记下理解:
可以将变换后的矩阵的两个列看作变换后的基向量fx fy
这样就可以通过变换后的矩阵看出坐标做了什么变换
举个简单小🌰:
分析下面这个矩阵 [ 0 − 1 2 0 ] \begin{bmatrix}0 &-1 \\ 2 & 0 \end{bmatrix} [02−10]
1.平面上的两个原始的基向量为:x[1,0] y:[0,1]
2.将变换矩阵拆分为两个基向量:x[0,-2] y:[-1,0]
3.倒推一下
1.x轴[0,-2]<–[0,-1]为长度缩放了两倍,[0,-1]<–[1,0]为逆时针旋转90度
2.y轴[-1,0]<–[0,1]为逆时针旋转90度
结论:矩阵对该坐标整体旋转-90度 且x轴缩放了两倍
倒推完论证下:
按照上边的推论 变换前随机制定一个坐标(2,3),先对x轴缩放两倍得到新的坐标为(4,3),再逆时针旋转90度,那么变换后的坐标应为(-3,4)
套下公式
[
0
−
1
2
0
]
[
2
3
]
\begin{bmatrix}0&-1\\2&0\end{bmatrix} \begin{bmatrix}2\\3\end{bmatrix}
[02−10][23]
也就是:x = 0*2+-1*3 = -3, y = 2*2+0*3 = 4
和猜测的结果一样,至此已经推导出简单的旋转和缩放
TODO:
为什么长度变了就一定是缩放,不能是平移?《 3D基础笔记之矩阵:2齐次坐标下的平移操作》
旋转角度总是90度 其他度数呢?《3D基础笔记之矩阵:3三维空间下的旋转和缩放》