如何仅通过Euler Angles获取Forward、Right和Up向量?不使用quaternions或Matrices
仅用欧拉角计算Forward/Right/Up向量的可行方案
完全可以做到,欧拉角本身就是对三维空间旋转的一种描述,本质是绕三个轴的依次旋转变换,我们可以直接通过三角函数运算推导三个方向向量,不需要借助四元数或矩阵。
前提:明确欧拉角旋转顺序
首先要确定你使用的欧拉角旋转顺序(不同顺序的计算逻辑差异很大),下面以最常用的**Y-X-Z顺序(偏航Yaw→俯仰Pitch→翻滚Roll)**为例推导,对应角度定义:
yaw:绕世界Y轴旋转的角度(γ)pitch:绕本地X轴旋转的角度(β)roll:绕本地Z轴旋转的角度(α)
向量计算实现
先预计算三角函数值减少重复运算,以下是Python示例代码:
import math # 输入欧拉角(单位:度) yaw = 30 pitch = 15 roll = 0 # 角度转弧度 yaw_rad = math.radians(yaw) pitch_rad = math.radians(pitch) roll_rad = math.radians(roll) # 预计算三角函数值 cy = math.cos(yaw_rad) sy = math.sin(yaw_rad) cp = math.cos(pitch_rad) sp = math.sin(pitch_rad) cr = math.cos(roll_rad) sr = math.sin(roll_rad) # 计算Forward(前向)向量 forward_x = cy * sp * cr + sy * sr forward_y = sp * sr - cy * cr forward_z = cy * cp forward = (forward_x, forward_y, forward_z) # 计算Right(右向)向量 right_x = cy * cp * sr - sy * cr right_y = -cy * cr - sy * cp * sr right_z = sy * sp right = (right_x, right_y, right_z) # 计算Up(上向)向量 up_x = -sy * cp up_y = cy * cp up_z = sp up = (up_x, up_y, up_z)
关键注意点
- 若你使用的是其他旋转顺序(比如Z-Y-X、X-Y-Z),需要重新推导三角函数组合公式,核心逻辑是依次应用每个轴的旋转三角函数变换
- 所有三角函数计算需基于弧度,务必做好角度与弧度的转换
- 万向锁(Gimbal Lock)是欧拉角的固有缺陷,和是否使用四元数/矩阵无关,只要用欧拉角就可能遇到该问题
内容的提问来源于stack exchange,提问作者JacobDev
相关产品推荐
相关产品推荐

