当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy Rotation.as_euler用法及代码示例


本文简要介绍 python 语言中 scipy.spatial.transform.Rotation.as_euler 的用法。

用法:

Rotation.as_euler(self, seq, degrees=False)#

表示为欧拉角。

任何方向都可以表示为 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)

参考

[2]

Bernardes E, Viollet S (2022) 四元数到欧拉角的转换:一种直接、通用且计算高效的方法。 《公共科学 Library ONE》17(11):e0276302。 https://doi.org/10.1371/journal.pone.0276302

例子

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

表示单次旋转:

>>> 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)

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.spatial.transform.Rotation.as_euler。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。