SciPy库spatial.transform模块Rotation类的from_rotvec 函数介绍

SciPy 库的 spatial.transform 模块 Rotation 类 是一个工具类,用于在多种旋转表示形式(例如旋转矩阵、四元数、旋转向量、欧拉角等)之间进行转换,以及执行旋转操作。

示例代码

1. 构造旋转对象
from scipy.spatial.transform import Rotation as scipy_R
import numpy as np

# 定义一个旋转向量 (绕 Z 轴旋转 π/2 弧度)
rotvec = np.array([0, 0, np.pi / 2])

# 从旋转向量构造旋转对象
rotation = scipy_R.from_rotvec(rotvec)

# 输出旋转矩阵
print("Rotation matrix:\n", rotation.as_matrix())

解释:

  • rotvec = [0, 0, π/2] 表示绕 Z-轴旋转 90∘ (π/2 弧度)。
  • as_matrix() 方法将 Rotation 对象转换为 3×3 旋转矩阵。
2. 批量操作
# 一组旋转向量 (分别表示绕 X, Y, Z 轴旋转 π/3)
rotvecs = np.array([
    [np.pi / 3, 0, 0],  # X-axis
    [0, np.pi / 3, 0],  # Y-axis
    [0, 0, np.pi / 3]   # Z-axis
])

# 从旋转向量批量构造旋转对象
rotations = scipy_R.from_rotvec(rotvecs)

# 转换为旋转矩阵
rotation_matrices = rotations.as_matrix()
print("Batch Rotation matrices:\n", rotation_matrices)

解释:

  • 使用批量旋转向量构造一组旋转对象。
  • as_matrix() 转换每个旋转向量对应的旋转为旋转矩阵。
  • 结果是一个形状为 (3,3,3) 的数组,包含三个旋转矩阵。
3. 反向操作
# 给定一个旋转矩阵
rot_matrix = np.array([
    [0, -1, 0],
    [1, 0, 0],
    [0, 0, 1]
])

# 从旋转矩阵构造 Rotation 对象并转换为旋转向量
rotation = scipy_R.from_matrix(rot_matrix)
rotvec = rotation.as_rotvec()
print("Rotation vector:", rotvec)

解释:

  • 给定旋转矩阵 R,从中提取旋转向量 r。
  • 输出的旋转向量会重新编码角度和轴。

from_rotvec函数的应用场景

  1. 机器人学: 处理关节的旋转或末端执行器姿态。
  2. 计算机图形学: 执行刚体变换或相机旋转。
  3. 分子建模: 处理分子的旋转。
  4. 扩散模型: 在 SO(3)SO(3) 上进行采样与噪声扩散。
  5. 姿态估计: 从旋转向量计算旋转矩阵并应用于运动分析。

通过 scipy_R.from_rotvec,可以将紧凑的旋转向量形式高效地转换为其他旋转表示,满足多种科学与工程需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值