近日一个朋友在面试腾讯魔方《一人之下》的岗位时,被面试官要求推导二维旋转矩阵。 因为已经被问过很多次,推导过程很顺利,面试官问他「是不是用 AI 辅助了」并要求他共享屏幕或转摄像头以示清白; 其後又问了「高考数学考几分」、「是哪里人」等问题。
现给出基于复数的推导方法。
定义,可不看
旋转是线性变换。 二维旋转矩阵是指这样一个矩阵: 它的形式中含有参量 $\theta$,使得平面直角坐标系中的向量 $[x\ y]^T$ 被它左乘後得到的结果等于该向量以坐标原点为旋转中心旋转 $\theta$ (有向)弧度得到的结果。设输入向量是 $[x\ y]^T$,现将其写成复数的形式 $x+yi$,那么其沿原点旋转 $\theta$ 弧度後的结果为 $e^{\theta i}\cdot(x+iy)$。
展开,得到:
$$\begin{aligned} e^{\theta i}\cdot(x+iy) &=(\cos\theta+i\sin\theta)\cdot(x+iy)\\ &=(x\cos\theta-y\sin\theta)+i(x\sin\theta+y\cos\theta). \end{aligned}$$
抄系数,即可得二维旋转矩阵的表达式:
$$ R_2(\theta)= \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}. $$
这种水平的数学推导是任何一个上课认真听讲了的理工科本科生都应当能够信手拈来的。 希望这位周姓面试官以後不要再以己度人,无端怀疑游戏从业者的基础数学水平。