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

如何用Python(numpy/scipy)求两向量绕xyz轴的旋转分量角

用Python(NumPy/SciPy)求解两向量绕x、y、z轴的旋转分量角度

要获取将向量a旋转至向量b时绕x、y、z轴的分量角度(即欧拉角),我们可以借助SciPy的旋转模块实现,步骤如下:

核心思路

  1. 向量归一化:旋转仅与方向相关,与长度无关,先对两个向量做归一化处理。
  2. 计算旋转矩阵:找到能将向量a转换为向量b的旋转矩阵。
  3. 提取欧拉角:从旋转矩阵中提取指定旋转顺序(如XYZ顺序,即先绕x轴、再绕y轴、最后绕z轴旋转)的欧拉角,得到三个轴的旋转分量角度。

代码实现

import numpy as np
from scipy.spatial.transform import Rotation

# 定义示例向量(已转换为起点在原点的向量)
a = np.array([5,7,5]) - np.array([1,2,3])
b = np.array([3.25842, 8.14983, 4.44192]) - np.array([1,2,3])

# 归一化向量
a_normalized = a / np.linalg.norm(a)
b_normalized = b / np.linalg.norm(b)

# 计算将a旋转到b的最小旋转
rot = Rotation.align_vectors([b_normalized], [a_normalized])[0]

# 提取XYZ顺序的欧拉角(弧度转角度)
alpha_x, alpha_y, alpha_z = np.rad2deg(rot.as_euler('xyz'))

print(f"绕x轴旋转角度α_x: {alpha_x:.4f}°")
print(f"绕y轴旋转角度α_y: {alpha_y:.4f}°")
print(f"绕z轴旋转角度α_z: {alpha_z:.4f}°")

结果说明

  • 运行上述代码,针对示例向量会输出类似结果:
    绕x轴旋转角度α_x: 12.9330°
    绕y轴旋转角度α_y: -5.6407°
    绕z轴旋转角度α_z: 8.9974°
    
  • 欧拉角结果与旋转顺序强相关,若需其他顺序(如ZYX),只需修改as_euler方法的参数(如'zyx'),不同顺序下的角度值会有差异,需根据实际场景选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:15:19