如何计算球体表面点经Roll、Pitch、Yaw三维旋转后的坐标?
解决方法:基于Unity旋转规则的手动坐标计算
首先明确Unity的核心旋转规则:采用左手坐标系,旋转顺序固定为 Yaw(绕Y轴)→ Pitch(绕X轴)→ Roll(绕Z轴),角度方向定义为从轴正方向看向原点时的顺时针旋转。要手动计算旋转后的坐标,需通过旋转矩阵分步相乘实现,具体步骤如下:
1. 角度转弧度
三角函数计算需使用弧度,转换公式:弧度 = 角度 × π / 180
针对你的示例:
- Yaw(α=15°):≈0.2618 rad,cosα≈0.9659,sinα≈0.2588
- Pitch(β=30°):≈0.5236 rad,cosβ≈0.8660,sinβ≈0.5
- Roll(γ=45°):≈0.7854 rad,cosγ≈0.7071,sinγ≈0.7071
2. 单个轴的旋转矩阵
每个轴的旋转矩阵如下(向量按列向量处理,矩阵乘法顺序为从右到左,即先应用Yaw,再Pitch,最后Roll):
绕Y轴(Yaw)旋转矩阵
[ cosα 0 sinα ] [ 0 1 0 ] [ -sinα 0 cosα ]
绕X轴(Pitch)旋转矩阵
[ 1 0 0 ] [ 0 cosβ -sinβ ] [ 0 sinβ cosβ ]
绕Z轴(Roll)旋转矩阵
[ cosγ -sinγ 0 ] [ sinγ cosγ 0 ] [ 0 0 1 ]
3. 分步计算旋转后的坐标
原坐标为 P = (1, 0, 0),按旋转顺序逐步计算:
第一步:应用Yaw旋转
将P与Yaw矩阵相乘,得到中间向量P1:
P1.x = 1×cosα + 0×0 + 0×(-sinα) = cosα ≈ 0.9659 P1.y = 1×0 + 0×1 + 0×0 = 0 P1.z = 1×sinα + 0×0 + 0×cosα = -sinα ≈ -0.2588
P1 ≈ (0.9659, 0, -0.2588)
第二步:应用Pitch旋转
将P1与Pitch矩阵相乘,得到中间向量P2:
P2.x = P1.x×1 + P1.y×0 + P1.z×0 = 0.9659 P2.y = P1.x×0 + P1.y×cosβ + P1.z×(-sinβ) = 0 + 0 + (-0.2588)×(-0.5) ≈ 0.1294 P2.z = P1.x×0 + P1.y×sinβ + P1.z×cosβ = 0 + 0 + (-0.2588)×0.8660 ≈ -0.2241
P2 ≈ (0.9659, 0.1294, -0.2241)
第三步:应用Roll旋转
将P2与Roll矩阵相乘,得到最终坐标P3:
P3.x = P2.x×cosγ + P2.y×(-sinγ) + P2.z×0 ≈ 0.9659×0.7071 - 0.1294×0.7071 ≈ 0.5915 P3.y = P2.x×sinγ + P2.y×cosγ + P2.z×0 ≈ 0.9659×0.7071 + 0.1294×0.7071 ≈ 0.7745 P3.z = P2.x×0 + P2.y×0 + P2.z×1 = -0.2241
最终结果
原坐标(1,0,0)经过[Roll=45°, Pitch=30°, Yaw=15°]旋转后,新坐标约为:(0.5915, 0.7745, -0.2241)
内容的提问来源于stack exchange,提问作者Blast
相关产品推荐
相关产品推荐

