摘要
在二维平面直角坐标系中,对平面上的点进行旋转,是一个线性变换的过程。同理,向量旋转可以通过坐标系同样化为点的旋转。以推导向量旋转方法为例,总结点和向量的旋转方法。
推导
本文默认逆时针旋转,若要顺时针旋转,只需要将角度变为负即可。
假设在单位圆上有一点 $B$ 与原点 $O$ 连成的向量 $\overrightarrow{OB}$ ,与 $x$ 轴之间形成的夹角为 $\alpha$ ,则 $B$ 的坐标可以表示为 $(x_0 = cos\alpha,y_0 = sin\alpha)$
推广,若不是单位圆,现在的圆半径为 $R$(圆心仍在圆点上),则 $x_0 = |R| \cdot cos\alpha,y_0 = |R| \cdot sin\alpha$
假如向量 $\overrightarrow{OB}$ 逆时针旋转至 $\overrightarrow{OB'}$ ,旋转角为 $\beta$,则现在 $x_1 = |R| \cdot cos(\alpha + \beta),y_1 = |R| \cdot sin(\alpha + \beta)$
用实用而美丽的(yys 名言 诱导公式将其拆开得到:
$x_1 = |R|\cdot(cos\alpha cos\beta - sin\alpha sin\beta),y_1 = |R| \cdot (sin\alpha cos\beta + cos\alpha sin\beta)$
然后可以看见拆了括号以后两个式子都可以用 $x_0,y_0$ 来代替一些项,得到:
$x_1 = x_0cos\beta - y_0sin\beta,y_1 = y_0cos\beta + x_0 sin\beta$
回到摘要中说的,旋转变换是一个线性变换,可以用矩阵来表示。该矩阵叫变换矩阵。对一个点实施线性变换就是通过乘上该线性变换的矩阵完成的。
在二维平面直角坐标系中的旋转变换矩阵就是:
$$ \begin{bmatrix} x_0 & y_0 \end{bmatrix} \begin{bmatrix} cos\beta & sin\beta \\-sin\beta & cos\beta \end{bmatrix} = \begin{bmatrix} x_1 & y_1 \end{bmatrix} $$
推广:绕任意一点旋转
刚才的步骤都是绕原点旋转的,想让其绕任意一点旋转,只需要先乘上一个位移变换矩阵(变回原点)再乘上旋转变换矩阵最后再乘回来即可。
比如现在想让 $(x,y)$ 绕 $(x_0,y_0)$ 逆时针旋转 $\beta \ \mathrm{rad}$ ,则最终坐标为 $(x_1,y_1)$:
$$ \begin{bmatrix} x & y & 1 \\0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\0 & 1 & 0 \\ x_0 & y_0 & 1 \end{bmatrix} \begin{bmatrix} cos\beta & sin\beta & 0 \\-sin\beta & cos\beta & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\0 & 1 & 0 \\ -x_0 & -y_0 & 1 \end{bmatrix} = \begin{bmatrix} x_1 & y_1 & - \\ - & - & - \\ - & - & -\end{bmatrix} $$
直接写成公式就是:
$x_1 = (x+x_0) cos\beta - (y+y_0)sin\beta - x_0, y_1 = (x+x_0) sin\beta + (y+y_0)cos \beta - y_0 $
后记
后来我了解到,在数学课上,平面直角坐标系的象限是逆时针方向转的,所以我推公式的时候,也是把 $\beta$ 角往逆时针转。但是在计科里面,许多函数是把顺时针规定为正的,所以许多 Blog 推的也是往顺时针转的。