euler角与旋转变换矩阵
选定一个旋转轴序列,比如Z→Y→XZ→Y→X,或者Z→X→ZZ→X→Z等;按照这个固定顺序,依次绕这些轴旋转三个角度;合成后的总旋转就是一个旋转矩阵RRR;这三个角度就是欧拉角。Proper Euler 角:三个旋转中,头尾绕的是“同一个轴”(比如Z!−!X!−!ZZ!X!ZZ!−!X!−!ZTait–Bryan 角:三个轴互不相同(比如Z!−!Y!−!XZ!Y!XZ!−!Y!−!X。
“欧拉角”就是“先绕某个轴转、再绕另一个轴转、再绕第三个轴转”这三次旋转的角度;
“旋转矩阵”就是把这三次旋转合成后的一次大旋转,用一个3×33\times 33×3矩阵来表示。
两者是一一对应(除了奇异情况)。
下面我会从基础一路推到公式推导和互相转换,尽量写到“看完就能自己推一遍”。
一、3D 旋转与旋转矩阵的基本概念
在三维空间中,一个点的坐标可以写成列向量:
p=[x y z] \mathbf{p} = \begin{bmatrix} x \ y \ z \end{bmatrix} p=[x y z]
一个“纯旋转”是一个线性变换,它满足:
- 长度不变(保持向量模长)
- 夹角不变(保持角度)
这样的线性变换可以写成矩阵乘法:
p′=Rp \mathbf{p}' = R \mathbf{p} p′=Rp
其中RRR就是一个3×33\times 33×3的旋转矩阵。
满足两个关键条件:
- 正交:
R⊤R=I R^\top R = I R⊤R=I
- 行列式为111:
det(R)=1 \det(R) = 1 det(R)=1
所有这样的矩阵构成的集合叫做SO(3)SO(3)SO(3)(三维特殊正交群)。
欧拉角的意义就是:
用三个实数(三个角度)来参数化SO(3)SO(3)SO(3)里的一个矩阵RRR。
二、绕坐标轴的“基本旋转矩阵”
我们先规定右手坐标系,坐标轴分别为X,Y,ZX,Y,ZX,Y,Z。
定义三个“基本旋转”:
- 绕XXX轴旋转角度ϕ\phiϕ(通常叫 roll)
- 绕YYY轴旋转角度θ\thetaθ(通常叫 pitch)
- 绕ZZZ轴旋转角度ψ\psiψ(通常叫 yaw)
对应的三个基本旋转矩阵分别是:
1. 绕XXX轴旋转ϕ\phiϕ:Rx(ϕ)R_x(\phi)Rx(ϕ)
Rx(ϕ)=[100 0cosϕ−sinϕ 0sinϕcosϕ] R_x(\phi) = \begin{bmatrix} 1 & 0 & 0 \ 0 & \cos\phi & -\sin\phi \ 0 & \sin\phi & \cos\phi \end{bmatrix} Rx(ϕ)=[100 0cosϕ−sinϕ 0sinϕcosϕ]
含义:XXX坐标不变,只在YYY–ZZZ平面内转一圈。
2. 绕YYY轴旋转θ\thetaθ:Ry(θ)R_y(\theta)Ry(θ)
Ry(θ)=[cosθ0sinθ 010 −sinθ0cosθ] R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \ 0 & 1 & 0 \ -\sin\theta & 0 & \cos\theta \end{bmatrix} Ry(θ)=[cosθ0sinθ 010 −sinθ0cosθ]
含义:YYY坐标不变,只在XXX–ZZZ平面内转。
3. 绕ZZZ轴旋转ψ\psiψ:Rz(ψ)R_z(\psi)Rz(ψ)
Rz(ψ)=[cosψ−sinψ0 sinψcosψ0 001] R_z(\psi) = \begin{bmatrix} \cos\psi & -\sin\psi & 0 \ \sin\psi & \cos\psi & 0 \ 0 & 0 & 1 \end{bmatrix} Rz(ψ)=[cosψ−sinψ0 sinψcosψ0 001]
含义:ZZZ坐标不变,只在XXX–YYY平面内转。
关键点:
任意一个三维旋转,都可以写成某个顺序的这三种基本旋转之积,比如
R=Rz(ψ)Ry(θ)Rx(ϕ)R = R_z(\psi) R_y(\theta) R_x(\phi)R=Rz(ψ)Ry(θ)Rx(ϕ)
这三个角ϕ,θ,ψ\phi,\theta,\psiϕ,θ,ψ就是一种欧拉角(更准确说是 Tait–Bryan 角)表示。
三、什么是“欧拉角”?——就是“先转、再转、再转”的顺序规则
欧拉角的核心:
- 选定一个旋转轴序列,比如Z→Y→XZ\to Y\to XZ→Y→X,或者Z→X→ZZ\to X\to ZZ→X→Z等;
- 按照这个固定顺序,依次绕这些轴旋转三个角度;
- 合成后的总旋转就是一个旋转矩阵RRR;
- 这三个角度就是欧拉角。
注意有两个常见概念:
- Proper Euler 角:三个旋转中,头尾绕的是“同一个轴”(比如Z!−!X!−!ZZ!-!X!-!ZZ!−!X!−!Z)
- Tait–Bryan 角:三个轴互不相同(比如Z!−!Y!−!XZ!-!Y!-!XZ!−!Y!−!X,也就是常说的 yaw–pitch–roll)
在机器人/计算机视觉/无人机里最常用的是 Tait–Bryan 的Z!−!Y!−!XZ!-!Y!-!XZ!−!Y!−!X顺序(yaw–pitch–roll)。
四、一定要说清楚:“先后顺序”和“内禀/外禀”
这也是你问题里“先转”的关键所在。
1. 外禀(extrinsic)旋转
- 每次都绕固定的世界坐标轴转
- 比如:先绕世界XXX轴,再绕世界YYY轴,再绕世界ZZZ轴
2. 内禀(intrinsic)旋转
- 每次都绕物体自身当前的坐标轴转
- 比如:先绕自身ZZZ轴,再绕当前YYY轴,再绕当前XXX轴
数学上,有一个漂亮的结论:
“内禀 Z!−!Y!−!XZ!-!Y!-!XZ!−!Y!−!X 顺序 == 外禀 X!−!Y!−!ZX!-!Y!-!ZX!−!Y!−!Z 逆序”
所以通常我们只要牢牢记住矩阵乘法的顺序就行:
-
如果写成右乘向量p′=Rp\mathbf{p}' = R\mathbf{p}p′=Rp:
- “先绕XXX再绕YYY再绕ZZZ” → 矩阵R=RzRyRxR = R_z R_y R_xR=RzRyRx
- “最后发生的旋转,排在矩阵乘积的最左边”
下面我们选一个在工程里最常用的约定:
内禀Z!−!Y!−!XZ!-!Y!-!XZ!−!Y!−!X,也就是航天里的 yaw–pitch–roll
五、例子:ZYX 欧拉角(yaw–pitch–roll) → 旋转矩阵
我们设:
- 滚转角(roll):ϕ\phiϕ,绕XXX轴
- 俯仰角(pitch):θ\thetaθ,绕YYY轴
- 偏航角(yaw):ψ\psiψ,绕ZZZ轴
采用**内禀Z→Y→XZ\to Y\to XZ→Y→X**顺序(相当于外禀X→Y→ZX\to Y\to ZX→Y→Z逆序),
通常写:
R(ϕ,θ,ψ)=Rz(ψ),Ry(θ),Rx(ϕ) R(\phi,\theta,\psi) = R_z(\psi), R_y(\theta), R_x(\phi) R(ϕ,θ,ψ)=Rz(ψ),Ry(θ),Rx(ϕ)
第一步:写出三个基本矩阵
刚才已经给出了,这里只写一遍方便观察:
Rx(ϕ)=[1000cosϕ−sinϕ0sinϕcosϕ] R_x(\phi) = \begin{bmatrix} 1 & 0 & 0\\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi \end{bmatrix} Rx(ϕ)= 1000cosϕsinϕ0−sinϕcosϕ
Ry(θ)=[cosθ0sinθ010−sinθ0cosθ] R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix} Ry(θ)= cosθ0−sinθ010sinθ0cosθ
Rz(ψ)=[cosψ−sinψ0sinψcosψ0001] R_z(\psi) = \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(ψ)= cosψsinψ0−sinψcosψ0001
第二步:先算 Ry(θ)Rx(ϕ)R_y(\theta) R_x(\phi)Ry(θ)Rx(ϕ)
Ry(θ)Rx(ϕ)=[cosθ0sinθ010−sinθ0cosθ][1000cosϕ−sinϕ0sinϕcosϕ ] R_y(\theta)R_x(\phi)= \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi\ \end{bmatrix} Ry(θ)Rx(ϕ)= cosθ0−sinθ010sinθ0cosθ 1000cosϕsinϕ0−sinϕcosϕ
逐项相乘(我写结果,细节你可以自己按行乘列验证):
Ry(θ)Rx(ϕ)=[cosθsinθsinϕsinθcosϕ0cosϕ−sinϕ−sinθcosθsinϕcosθcosϕ] R_y(\theta)R_x(\phi) = \begin{bmatrix} \cos\theta & \sin\theta\sin\phi & \sin\theta\cos\phi \\ 0 & \cos\phi & -\sin\phi \\ -\sin\theta & \cos\theta\sin\phi & \cos\theta\cos\phi \end{bmatrix} Ry(θ)Rx(ϕ)= cosθ0−sinθsinθsinϕcosϕcosθsinϕsinθcosϕ−sinϕcosθcosϕ
第三步:再左乘 Rz(ψ)R_z(\psi)Rz(ψ) 得到总矩阵
R=Rz(ψ),Ry(θ),Rx(ϕ)=[cosψ−sinψ0sinψcosψ0001][cosθsinθsinϕsinθcosϕ0cosϕ−sinϕ−sinθcosθsinϕcosθcosϕ] R = R_z(\psi),R_y(\theta),R_x(\phi)= \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \cos\theta & \sin\theta\sin\phi & \sin\theta\cos\phi \\ 0 & \cos\phi & -\sin\phi \\ -\sin\theta & \cos\theta\sin\phi & \cos\theta\cos\phi \end{bmatrix} R=Rz(ψ),Ry(θ),Rx(ϕ)= cosψsinψ0−sinψcosψ0001 cosθ0−sinθsinθsinϕcosϕcosθsinϕsinθcosϕ−sinϕcosθcosϕ
同样逐项相乘,最后得到:
R(ϕ,θ,ψ)=[cosψcosθcosψsinθsinϕ−sinψcosϕcosψsinθcosϕ+sinψsinϕsinψcosθsinψsinθsinϕ+cosψcosϕsinψsinθcosϕ−cosψsinϕ−sinθcosθsinϕcosθcosϕ] R(\phi,\theta,\psi) = \begin{bmatrix} \cos\psi\cos\theta & \cos\psi\sin\theta\sin\phi - \sin\psi\cos\phi & \cos\psi\sin\theta\cos\phi + \sin\psi\sin\phi \\ \sin\psi\cos\theta & \sin\psi\sin\theta\sin\phi + \cos\psi\cos\phi & \sin\psi\sin\theta\cos\phi - \cos\psi\sin\phi \\ -\sin\theta & \cos\theta\sin\phi & \cos\theta\cos\phi \end{bmatrix} R(ϕ,θ,ψ)= cosψcosθsinψcosθ−sinθcosψsinθsinϕ−sinψcosϕsinψsinθsinϕ+cosψcosϕcosθsinϕcosψsinθcosϕ+sinψsinϕsinψsinθcosϕ−cosψsinϕcosθcosϕ
这就是ZYX(yaw–pitch–roll)欧拉角到旋转矩阵的关系。
给它一个更紧凑的记号:设
- cϕ=cosϕ, sϕ=sinϕc_\phi = \cos\phi,\ s_\phi = \sin\phicϕ=cosϕ, sϕ=sinϕ
- cθ=cosθ, sθ=sinθc_\theta = \cos\theta,\ s_\theta = \sin\thetacθ=cosθ, sθ=sinθ
- cψ=cosψ, sψ=sinψc_\psi = \cos\psi,\ s_\psi = \sin\psicψ=cosψ, sψ=sinψ
则:
R=[cψcθcψsθsϕ−sψcϕcψsθcϕ+sψsϕsψcθsψsθsϕ+cψcϕsψsθcϕ−cψsϕ−sθcθsϕcθcϕ] R = \begin{bmatrix} c_\psi c_\theta & c_\psi s_\theta s_\phi - s_\psi c_\phi & c_\psi s_\theta c_\phi + s_\psi s_\phi \\ s_\psi c_\theta & s_\psi s_\theta s_\phi + c_\psi c_\phi & s_\psi s_\theta c_\phi - c_\psi s_\phi \\ -s_\theta & c_\theta s_\phi & c_\theta c_\phi \end{bmatrix} R= cψcθsψcθ−sθcψsθsϕ−sψcϕsψsθsϕ+cψcϕcθsϕcψsθcϕ+sψsϕsψsθcϕ−cψsϕcθcϕ
从欧拉角到旋转矩阵的核心:
按顺序写出绕各轴的基本矩阵,再按“最后发生的旋转排在最左边”的原则相乘,就得到旋转矩阵。
每个矩阵元素都是欧拉角三角函数的组合。
六、反过来:从旋转矩阵 RRR 求欧拉角 (ϕ,θ,ψ)(\phi,\theta,\psi)(ϕ,θ,ψ)
设上面的矩阵记为:
R=[r11r12r13r21r22r23r31r32r33] R = \begin{bmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{bmatrix} R= r11r21r31r12r22r32r13r23r33
根据我们推出来的形式,有:
- r31=−sinθr_{31} = -\sin\thetar31=−sinθ
- r32=cosθsinϕr_{32} = \cos\theta\sin\phir32=cosθsinϕ
- r33=cosθcosϕr_{33} = \cos\theta\cos\phir33=cosθcosϕ
- r21=sinψcosθr_{21} = \sin\psi\cos\thetar21=sinψcosθ
- r11=cosψcosθr_{11} = \cos\psi\cos\thetar11=cosψcosθ
在一般(不退化)情况下,cosθ≠0\cos\theta \neq 0cosθ=0,我们可以这样解:
1. 求θ\thetaθ(pitch)
由
r31=−sinθ r_{31} = -\sin\theta r31=−sinθ
得到
θ=arcsin(−r31) \theta = \arcsin(-r_{31}) θ=arcsin(−r31)
或者写成
θ=−arcsin(r31) \theta = -\arcsin(r_{31}) θ=−arcsin(r31)
(两种写法等价)
2. 求ϕ\phiϕ(roll)
看r32r_{32}r32和r33r_{33}r33:
r32=cosθsinϕ,r33=cosθcosϕ r_{32} = \cos\theta\sin\phi,\quad r_{33} = \cos\theta\cos\phi r32=cosθsinϕ,r33=cosθcosϕ
当cosθ≠0\cos\theta \neq 0cosθ=0时,两边同时除以cosθ\cos\thetacosθ:
r32cosθ=sinϕ,r33cosθ=cosϕ \frac{r_{32}}{\cos\theta} = \sin\phi,\quad \frac{r_{33}}{\cos\theta} = \cos\phi cosθr32=sinϕ,cosθr33=cosϕ
于是可以用atan2\operatorname{atan2}atan2函数(考虑象限):
ϕ=atan2(r32, r33) \phi = \operatorname{atan2}(r_{32},\ r_{33}) ϕ=atan2(r32, r33)
3. 求ψ\psiψ(yaw)
看r21r_{21}r21和r11r_{11}r11:
r21=sinψcosθ,r11=cosψcosθ r_{21} = \sin\psi\cos\theta,\quad r_{11} = \cos\psi\cos\theta r21=sinψcosθ,r11=cosψcosθ
同样除以cosθ\cos\thetacosθ:
r21cosθ=sinψ,r11cosθ=cosψ \frac{r_{21}}{\cos\theta} = \sin\psi,\quad \frac{r_{11}}{\cos\theta} = \cos\psi cosθr21=sinψ,cosθr11=cosψ
于是:
ψ=atan2(r21, r11) \psi = \operatorname{atan2}(r_{21},\ r_{11}) ψ=atan2(r21, r11)
4. 汇总:ZYX 欧拉角反解公式(一般情况)
当cosθ≠0\cos\theta \neq 0cosθ=0时(也就是θ≠±π2\theta \neq \pm \frac{\pi}{2}θ=±2π):
θ=arcsin(−r31) \theta = \arcsin(-r_{31}) θ=arcsin(−r31)
ϕ=atan2(r32, r33) \phi = \operatorname{atan2}(r_{32},\ r_{33}) ϕ=atan2(r32, r33)
ψ=atan2(r21, r11) \psi = \operatorname{atan2}(r_{21},\ r_{11}) ψ=atan2(r21, r11)
注意:
- 这里的反解是假定你使用的旋转矩阵就是
R=Rz(ψ)Ry(θ)Rx(ϕ)R = R_z(\psi)R_y(\theta)R_x(\phi)R=Rz(ψ)Ry(θ)Rx(ϕ) - 如果顺序不同(比如R=RxRyRzR = R_x R_y R_zR=RxRyRz),整个元素对应关系都会变,反解公式也要按新顺序重新推。
七、“万向节锁”(Gimbal Lock)——欧拉角的坑
前面假设cosθ≠0\cos\theta \neq 0cosθ=0,即θ≠±π2\theta \neq \pm\frac{\pi}{2}θ=±2π。
当θ=±π2\theta = \pm\frac{\pi}{2}θ=±2π时,会发生:
- cosθ=0\cos\theta = 0cosθ=0
- 你会发现矩阵里有一些信息“合并”到一起,导致不同的(ϕ,ψ)(\phi,\psi)(ϕ,ψ)组合能产生同一个RRR。
这就是所谓的万向节锁现象:
三个转轴中,有两个轴变得共线,少了一个自由度。
在这种情况下,我们只能选一种约定来处理,例如:
- 当θ=+π2\theta = +\frac{\pi}{2}θ=+2π时,固定ϕ=0\phi = 0ϕ=0,把所有绕XXX和ZZZ的旋转合到ψ\psiψ里;
- 或者反过来固定ψ=0\psi = 0ψ=0,由r12,r13r_{12},r_{13}r12,r13之类的元素反求ϕ\phiϕ。
但是无论哪种约定,说明一个事实:
欧拉角与旋转矩阵不是“全局一一对应”的,
在某些姿态(奇异点)上,一组RRR对应无穷多组(ϕ,θ,ψ)(\phi,\theta,\psi)(ϕ,θ,ψ)。
这也是为什么在很多高精度/优化场景中,更喜欢用四元数或直接操作RRR,而不是欧拉角。
八、换一个“先转顺序”会怎样?
刚才我们用的是:
R=Rz(ψ)Ry(θ)Rx(ϕ) R = R_z(\psi)R_y(\theta)R_x(\phi) R=Rz(ψ)Ry(θ)Rx(ϕ)
如果你改成先绕XXX再绕YYY再绕ZZZ(外禀),矩阵就变成:
R′=Rx(α)Ry(β)Rz(γ) R' = R_x(\alpha)R_y(\beta)R_z(\gamma) R′=Rx(α)Ry(β)Rz(γ)
那么R′R'R′的每一个元素都会是α,β,γ\alpha,\beta,\gammaα,β,γ的不同组合。
推导方式完全一样:写出Rx,Ry,RzR_x,R_y,R_zRx,Ry,Rz,按顺序相乘即可。
关键是:顺序一变,矩阵形式就完全不同。
所以在工程里,大家讲“欧拉角”的时候,一定会同时说清楚顺序,例如:
- ZYX(yaw–pitch–roll)
- XYZ(roll–pitch–yaw)
- ZXZ、ZYZ 等等
不说顺序就说欧拉角,是不完整甚至是错误的。
九、欧拉角与“刚体位姿变换矩阵”的关系
在机器人、计算机视觉里,经常用4×44\times 44×4的齐次变换矩阵表示刚体位姿:
T=[Rt 0⊤1] T = \begin{bmatrix} R & \mathbf{t} \ \mathbf{0}^\top & 1 \end{bmatrix} T=[Rt 0⊤1]
其中:
- RRR 是3×33\times 33×3的旋转矩阵(刚才欧拉角那一套的结果)
- t=[tx ty tz]\mathbf{t} = \begin{bmatrix} t_x \ t_y \ t_z \end{bmatrix}t=[tx ty tz] 是平移向量
欧拉角只负责旋转部分:
- 给定欧拉角(ϕ,θ,ψ)(\phi,\theta,\psi)(ϕ,θ,ψ),先按顺序求出RRR
- 再把RRR填进TTT的左上角,配上平移t\mathbf{t}t
T(ϕ,θ,ψ,t)=[R(ϕ,θ,ψ)t 0⊤1] T(\phi,\theta,\psi,\mathbf{t}) = \begin{bmatrix} R(\phi,\theta,\psi) & \mathbf{t} \ \mathbf{0}^\top & 1 \end{bmatrix} T(ϕ,θ,ψ,t)=[R(ϕ,θ,ψ)t 0⊤1]
十、关系小结
你问“欧拉角与先转变换矩阵之间的关系”,可以总结成以下几个层次:
-
旋转矩阵层面
- 任意三维旋转可以用一个3×33\times 33×3的旋转矩阵RRR表示,满足
R⊤R=I,det(R)=1 R^\top R = I,\quad \det(R)=1 R⊤R=I,det(R)=1
- 任意三维旋转可以用一个3×33\times 33×3的旋转矩阵RRR表示,满足
-
基本旋转层面
- 绕三个坐标轴的基本旋转矩阵Rx(⋅),Ry(⋅),Rz(⋅)R_x(\cdot), R_y(\cdot), R_z(\cdot)Rx(⋅),Ry(⋅),Rz(⋅)可以显式写出;
-
欧拉角定义层面
- 选定一个旋转轴序列(比如 ZYX),
- 按这个顺序做三次基本旋转,
- 三个角度(ϕ,θ,ψ)(\phi,\theta,\psi)(ϕ,θ,ψ)就是欧拉角;
- 总旋转矩阵就是这些基本矩阵的乘积:
R(ϕ,θ,ψ)=Rz(ψ)Ry(θ)Rx(ϕ) R(\phi,\theta,\psi) = R_z(\psi)R_y(\theta)R_x(\phi) R(ϕ,θ,ψ)=Rz(ψ)Ry(θ)Rx(ϕ)
-
从欧拉角到矩阵
- 展开上述乘积,得到矩阵元素是sin,cos\sin,\cossin,cos的组合:
R=[cψcθcψsθsϕ−sψcϕcψsθcϕ+sψsϕsψcθsψsθsϕ+cψcϕsψsθcϕ−cψsϕ−sθcθsϕcθcϕ] R = \begin{bmatrix} c_\psi c_\theta & c_\psi s_\theta s_\phi - s_\psi c_\phi & c_\psi s_\theta c_\phi + s_\psi s_\phi \\ s_\psi c_\theta & s_\psi s_\theta s_\phi + c_\psi c_\phi & s_\psi s_\theta c_\phi - c_\psi s_\phi \\ -s_\theta & c_\theta s_\phi & c_\theta c_\phi \end{bmatrix} R= cψcθsψcθ−sθcψsθsϕ−sψcϕsψsθsϕ+cψcϕcθsϕcψsθcϕ+sψsϕsψsθcϕ−cψsϕcθcϕ
- 展开上述乘积,得到矩阵元素是sin,cos\sin,\cossin,cos的组合:
-
从矩阵到欧拉角
- 反过来从rijr_{ij}rij中解出(ϕ,θ,ψ)(\phi,\theta,\psi)(ϕ,θ,ψ):
θ=arcsin(−r31),ϕ=atan2(r32,r33),ψ=atan2(r21,r11) \theta = \arcsin(-r_{31}),\quad \phi = \operatorname{atan2}(r_{32}, r_{33}),\quad \psi = \operatorname{atan2}(r_{21}, r_{11}) θ=arcsin(−r31),ϕ=atan2(r32,r33),ψ=atan2(r21,r11) - 在θ=±π2\theta = \pm\frac{\pi}{2}θ=±2π时会出现奇异(万向节锁)。
- 反过来从rijr_{ij}rij中解出(ϕ,θ,ψ)(\phi,\theta,\psi)(ϕ,θ,ψ):
-
顺序的重要性
- 换了旋转顺序(比如 XYZ, ZXY, ZXZ 等),
- 总矩阵的形式与反解公式都会改变;
- 因此说“欧拉角”必须指定具体顺序。
更多推荐


所有评论(0)