3、旋转矩阵推导:绕X/Y/Z轴旋转的矩阵推导,以及组合旋转的链式法则
好,咱们今天来聊聊旋转矩阵。这东西在数据回放、机器人控制、三维重建里,几乎天天见。说白了,它就是描述一个物体怎么在三维空间里转圈的数学工具。
我个人习惯,每次讲旋转矩阵,都会先从最简单的二维旋转开始想。你想想看,二维平面里一个点绕原点转个角度,坐标怎么变?
假设有个点 P(x, y),绕原点逆时针转 θ 角,到了 P'(x', y')。用三角函数一推:
x' = x·cosθ - y·sinθ
y' = x·sinθ + y·cosθ
写成矩阵形式就是:
[x'] [cosθ -sinθ] [x]
[y'] = [sinθ cosθ] [y]
嗯,二维搞明白了,三维就好办了。三维旋转,其实就是固定一个轴,在另外两个轴构成的平面里做二维旋转。
3.1 绕X轴旋转
绕X轴旋转时,X坐标不变。Y和Z在YZ平面里转。这就像你拿着一根棍子,让它绕着自己的长度方向转。
推导很简单:
- x' = x
- y' = y·cosθ - z·sinθ
- z' = y·sinθ + z·cosθ
写成矩阵:
R_x(θ) = [1 0 0 ]
[0 cosθ -sinθ ]
[0 sinθ cosθ ]
3.2 绕Y轴旋转
绕Y轴旋转时,Y坐标不变。X和Z在XZ平面里转。注意,这里的坐标顺序跟绕X轴有点不一样。
推导结果:
- x' = x·cosθ + z·sinθ
- y' = y
- z' = -x·sinθ + z·cosθ
写成矩阵:
R_y(θ) = [cosθ 0 sinθ ]
[0 1 0 ]
[-sinθ 0 cosθ ]
3.3 绕Z轴旋转
绕Z轴旋转时,Z坐标不变。X和Y在XY平面里转。这个其实就是二维旋转的推广。
推导结果:
- x' = x·cosθ - y·sinθ
- y' = x·sinθ + y·cosθ
- z' = z
写成矩阵:
R_z(θ) = [cosθ -sinθ 0]
[sinθ cosθ 0]
[0 0 1]
3.4 组合旋转与链式法则
实际应用中,很少只绕一个轴转。比如一个飞行器,它要同时调整俯仰、偏航、滚转。这时候就需要组合旋转。
组合旋转的核心规则是:后乘的矩阵先作用。什么意思?
假设你先绕X轴转 α 角,再绕Y轴转 β 角,最后绕Z轴转 γ 角。那么总的旋转矩阵是:
R = R_z(γ) · R_y(β) · R_x(α)
注意顺序!矩阵乘法不满足交换律。R_x · R_y 和 R_y · R_x 结果完全不同。
举个例子,假设你要让一个摄像头先绕X轴转30°,再绕Y轴转45°:
R = R_y(45°) · R_x(30°)
R_x(30°) = [1 0 0 ]
[0 cos30 -sin30 ]
[0 sin30 cos30 ]
R_y(45°) = [cos45 0 sin45 ]
[0 1 0 ]
[-sin45 0 cos45 ]
最终 R = R_y(45°) · R_x(30°)
= [cos45 sin45·sin30 sin45·cos30 ]
[0 cos30 -sin30 ]
[-sin45 cos45·sin30 cos45·cos30 ]
你看,结果矩阵里每个元素都是三角函数组合。这就是链式法则的威力——把多个旋转浓缩成一个矩阵。
3.5 知识体系一览
下面这张图帮你理清本章的核心逻辑:
从这张图可以清楚看到:三个基础旋转是砖块,组合旋转是墙,链式法则是砌墙的规则。没有规则,墙就会塌。
3.6 总结
绕X/Y/Z轴的旋转矩阵,本质上就是二维旋转在三维空间里的推广。记住三点:
- 绕哪个轴,哪个轴的坐标就不变
- 另外两个轴构成平面,做二维旋转
- 注意绕Y轴时 sinθ 的符号位置不同
组合旋转时,链式法则告诉我们:矩阵乘法顺序就是旋转作用顺序。先做的旋转放在最右边,后做的放在最左边。这个顺序搞反了,结果就全错了。
嗯,旋转矩阵这块内容,理解透了后面学四元数、欧拉角都会轻松很多。建议你动手在纸上推一遍,再写几行代码验证一下,印象会深得多。