4、三维旋转矩阵:绕单轴旋转的矩阵形式

好,咱们进入正题。

三维旋转,说白了就是让一个向量或者一个坐标系,绕着某根轴转个角度。你想想看,飞机在空中滚转、俯仰、偏航,本质上都是绕轴旋转。我当年刚接触飞控时,就被这些旋转矩阵搞得晕头转向。后来发现,只要把绕单轴的情况吃透,后面的组合旋转就水到渠成了。

4.1 绕X轴旋转

先看最简单的——绕X轴转。想象你面前有一根笔直的X轴,坐标系绕它旋转,Y轴和Z轴会怎么动?

嗯,这里要注意:Y和Z会像钟摆一样在YZ平面内画圆。旋转角度记为θ,正方向按右手定则——拇指指向X轴正方向,四指弯曲的方向就是正转方向。

绕X轴旋转的矩阵长这样:

R_x(θ) = [1      0       0    ]
         [0   cosθ   -sinθ   ]
         [0   sinθ    cosθ   ]

为什么第一行是[1, 0, 0]?因为绕X轴转,X坐标纹丝不动。我有个学生曾经问我:「老师,那Y和Z的符号怎么记?」我的笨办法是——你拿一支笔当X轴,另一支笔当Y轴,转一下看看。Y轴往Z轴方向转时,Y分量减少,所以是-sinθ。

关键点:绕X轴旋转时,X坐标不变。Y和Z坐标按二维旋转公式变化,但注意符号。

4.2 绕Y轴旋转

绕Y轴旋转,道理一样,但矩阵形式略有不同。我刚开始学的时候,总把绕Y轴的矩阵写错,后来发现一个规律——你只要记住「哪个轴不动,那行就是单位向量」。

绕Y轴旋转的矩阵:

R_y(θ) = [ cosθ   0   sinθ ]
         [   0    1    0   ]
         [-sinθ   0   cosθ ]

你看,第二行是[0, 1, 0],因为Y轴不动。但注意!这里sinθ的符号位置和绕X轴不一样。绕X轴时,-sinθ在第二行第三列;绕Y轴时,-sinθ在第三行第一列。

为什么会这样?说白了,是因为坐标轴的排列顺序。X、Y、Z三个轴是循环对称的,但具体到矩阵里,符号位置会跟着轴走。我建议你直接记住这个结论:

  • 绕X轴:-sinθ在(2,3)位置
  • 绕Y轴:-sinθ在(3,1)位置
  • 绕Z轴:-sinθ在(1,2)位置

这个规律我到现在还在用,从来没出过错。

小技巧:如果你记不住符号位置,可以用「循环置换」法。X→Y→Z→X,每次循环,-sinθ的位置就跟着往后挪一个维度。

4.3 绕Z轴旋转

绕Z轴旋转,是三个里面最直观的。因为Z轴通常指向上方,绕Z轴转就像转陀螺。X和Y在水平面内旋转。

矩阵形式:

R_z(θ) = [cosθ   -sinθ   0]
         [sinθ    cosθ   0]
         [  0       0    1]

第三行[0, 0, 1],Z坐标不变。X和Y的变换,其实就是二维旋转矩阵的翻版。我在做飞行力学仿真时,绕Z轴的旋转用得最多——飞机的偏航运动就是绕Z轴转。

注意:这三个矩阵都是正交矩阵。什么意思?就是它们的逆矩阵等于转置矩阵。这个性质在后续做坐标反算时特别有用。我曾经在项目里直接用转置代替求逆,省了不少计算量。

4.4 三个矩阵的统一形式

其实,三个矩阵可以统一写成一种形式。我习惯这样记:

旋转轴 不动行 -sinθ位置
X轴 第1行 (2,3)
Y轴 第2行 (3,1)
Z轴 第3行 (1,2)

你发现没有?-sinθ的位置,正好是「不动行」的下一个维度。比如绕X轴,不动行是第1行,-sinθ就在(2,3);绕Y轴,不动行是第2行,-sinθ就在(3,1)。这个规律我百试百灵。

4.5 一个简单的例子

假设有一个点P,坐标是(1, 0, 0)。让它绕Z轴旋转90度,会得到什么?

代入R_z(90°):

R_z(90°) = [0  -1  0]
           [1   0  0]
           [0   0  1]

P' = R_z(90°) * [1, 0, 0]^T = [0, 1, 0]^T

结果P'变成了(0, 1, 0)。你想想看,原来在X轴正方向上的点,绕Z轴转90度后,跑到了Y轴正方向上。是不是很直观?

我当年做飞控算法验证时,就经常用这种简单例子来检查矩阵写没写对。一个点转90度,坐标应该正好互换,如果结果不对,那肯定是符号搞反了。

总结一下:

  • 绕哪个轴转,哪个轴的坐标就不变
  • -sinθ的位置有规律,记住循环置换法
  • 三个矩阵都是正交矩阵,逆矩阵等于转置
  • 用简单例子验证,90度旋转最直观

嗯,绕单轴旋转的矩阵就这些。别看简单,这是后面所有复杂旋转的基础。你把这些吃透了,欧拉角、四元数什么的,学起来就轻松多了。

绕单轴旋转矩阵知识结构图 三维旋转矩阵 绕X轴旋转 R_x(θ) 绕Y轴旋转 R_y(θ) 绕Z轴旋转 R_z(θ) X坐标不变 -sinθ在(2,3)位置 YZ平面内旋转 Y坐标不变 -sinθ在(3,1)位置 XZ平面内旋转 Z坐标不变 -sinθ在(1,2)位置 XY平面内旋转 共同特性 正交矩阵 · 逆矩阵=转置 · 右手定则

这张图把三个旋转矩阵的核心特征都标出来了。你一眼就能看出:哪个轴不动、-sinθ在哪、旋转平面是什么。我建议你把它截图保存,以后写代码时对照着看,不容易出错。

避坑指南:我曾经在写飞控代码时,把绕Y轴的矩阵符号写反了,结果仿真出来的飞机一直在倒着飞。排查了半天才发现是-sinθ的位置搞错了。所以,写代码前先在纸上画个图,确认一下旋转方向。

好了,绕单轴旋转的矩阵就这些。内容不多,但很基础。你把这些吃透了,后面学欧拉角、方向余弦矩阵,就会觉得顺理成章。