You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Euler旋转未按预期旋转向量?ZYX序列旋转问题排查

ZYX欧拉旋转的物体坐标系旋转误区

在ZYX欧拉旋转中,我理解初始绕自身Z轴的旋转会改变后续旋转的基准坐标系——欧拉角通常基于物体自身坐标系(body-fixed frame)测量,因此第二次绕Y轴的旋转应该基于第一次Z轴旋转后更新的Y轴,而非原世界坐标系的Y轴。

我写了一段测试代码,先绕物体Z轴旋转90度,再绕物体Y轴旋转90度:

% 旋转角度(度)
psi_z = 90;  % Z轴旋转角
theta_y = 90;  % Y轴旋转角

% 构造旋转矩阵
R_z = [cosd(psi_z) -sind(psi_z) 0;
       sind(psi_z)  cosd(psi_z) 0;
       0              0             1];

R_y = [cosd(theta_y)  0  sind(theta_y);
       0              1  0;
      -sind(theta_y)  0  cosd(theta_y)];

% 初始向量(代表飞机机头指向X轴)
v = [1; 0; 0];

% 第一次绕Z轴旋转
v_z = R_z * v;
disp("Z->");
disp(v_z);

% 第二次绕Y轴旋转
v_zy = R_y * v_z;
disp("Z->Y->");
disp(v_zy);

我预期的输出是:

Z->
     0
     1
     0

Z->Y->
     0
     0
     -1

但实际运行结果为:

Z->
     0
     1
     0

Z->Y->
     0
     1
     0

我无法理解为什么第二次旋转没有改变向量。用飞机模型类比:初始向量[1; 0; 0]是机头指向X轴,绕自身Z轴旋转90度后,机头指向原Y轴方向(即物体新的X轴),物体的新Y轴对应原X轴的负方向。此时绕物体Y轴旋转90度,机头应该指向原Z轴负方向,得到[0; 0; -1]才对。

我怀疑问题出在物体坐标系或中间坐标系的定义上,先明确几个术语:

  • R: 完整的Z-Y-X欧拉旋转序列
  • R0: 旋转前的初始姿态
  • R1: R的第一个分量,绕Z轴的欧拉旋转
  • R2: R的第二个分量,绕Y轴的欧拉旋转
  • R3: 绕X轴的第三次旋转

显然R1是绕R0的Z轴旋转,R2应该绕R1执行后的物体Y轴旋转,但代码结果显示R2似乎是绕R0的Y轴旋转。这是不是向量未按预期旋转的原因?难道欧拉旋转序列中的每个角度始终相对于初始世界坐标系,而非更新后的物体坐标系?

内容的提问来源于stack exchange,提问作者KMC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:33:31