欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Python scipy.spatial.transform.Rotation.as_euler 示例讲解

最编程 2024-04-14 20:16:48
...

表示为欧拉角。

任何方向都可以表示为 3 个基本旋转的组合。一旦选择了轴序列,欧拉角就定义了围绕每个相应轴 [1] 的旋转角度。

[2] 中的算法已用于计算围绕给定轴序列旋转的欧拉角。

欧拉角存在万向节锁定问题[3],表示失去了一定的*度,无法唯一确定第一个和第三个角度。在这种情况下,会发出警告,并将第三个角度设置为零。但是请注意,返回的角度仍然代表正确的旋转。

参数

seq 字符串,长度 3

3 个字符属于集合 {‘X’, ‘Y’, ‘Z’} 用于内部旋转,或 {‘x’, ‘y’, ‘z’} 用于外部旋转 [1] 。相邻轴不能相同。外部和内部旋转不能在一个函数调用中混合使用。

degrees 布尔值,可选

如果此标志为 True,则返回的角度以度为单位,否则以弧度为单位。默认为假。

返回

angles ndarray,形状 (3,) 或 (N, 3)

形状取决于用于初始化对象的输入的形状。返回的角度在以下范围内:

  • 第一个角度属于 [-180, 180] 度(含)

  • 第三个角度属于 [-180, 180] 度(包括)

  • 第二个角度属于:

    • [-90, 90] degrees if all axes are different (like xyz)

    • [0, 180] degrees if first and third axes are the same (like zxz)

参考

1 (12)

https://en.wikipedia.org/wiki/Euler_angles#Definition_by_intrinsic_rotations

scipy.spatial.transform.Rotation.as_euler

Malcolm D. Shuster,F. Landis Markley,“提取欧拉角的一般公式”,制导、控制和动力学杂志,第一卷。 29.1,第 215-221 页。 2006年

scipy.spatial.transform.Rotation.as_euler

https://en.wikipedia.org/wiki/Gimbal_lock#In_applied_mathematics

例子

>>> from scipy.spatial.transform import Rotation as R

表示单次旋转:

>>> r = R.from_rotvec([0, 0, np.pi/2])
>>> r.as_euler('zxy', degrees=True)
array([90.,  0.,  0.])
>>> r.as_euler('zxy', degrees=True).shape
(3,)

表示单次旋转的堆栈:

>>> r = R.from_rotvec([[0, 0, np.pi/2]])
>>> r.as_euler('zxy', degrees=True)
array([[90.,  0.,  0.]])
>>> r.as_euler('zxy', degrees=True).shape
(1, 3)

表示单个对象中的多个旋转:

>>> r = R.from_rotvec([
... [0, 0, np.pi/2],
... [0, -np.pi/3, 0],
... [np.pi/4, 0, 0]])
>>> r.as_euler('zxy', degrees=True)
array([[ 90.,   0.,   0.],
       [  0.,   0., -60.],
       [  0.,  45.,   0.]])
>>> r.as_euler('zxy', degrees=True).shape
(3, 3)