scipy.spatial.transform.Rotation.as_euler¶
- Rotation.as_euler()¶
表示为欧拉角。
任何方向都可以表示为3个基本旋转的组合。一旦选择了轴序列,欧拉角就定义了围绕每个轴的旋转角度 [1].
中的算法 [2] 用于计算绕给定轴序列旋转的欧拉角。
欧拉角受到万向节锁问题的困扰。 [3], 其中表示失去了自由度,并且不可能唯一地确定第一和第三角度。在这种情况下,会发出警告,并将第三个角度设置为零。但是请注意,返回的角度仍然表示正确的旋转。
- 参数
- seq字符串,长度为3
3个字符属于集合{‘X’,‘Y’,‘Z’}用于内部旋转,或{‘x’,‘y’,‘z’}用于外部旋转 [1]. 相邻轴不能相同。外部旋转和内部旋转不能在一个函数调用中混合使用。
- degrees布尔值,可选
如果此标志为True,则返回的角度以度为单位,否则以弧度为单位。默认值为False。
- 退货
- anglesndarray,形状(3,)或(N,3)
形状取决于用于初始化对象的输入的形状。返回的角度在以下范围内:
第一个角度属于 [-180, 180] 学位(包括学位和学位)
第三个角度属于 [-180, 180] 学位(包括学位和学位)
第二个角度属于:
[-90, 90] 如果所有轴都不同,则为度数(如xyz)
[0,180] 第一个轴和第三个轴相同时的度数(如zxz)
参考文献
- 1(1,2)
https://en.wikipedia.org/wiki/Euler_angles#Definition_by_intrinsic_rotations
- 2
马尔科姆·D·舒斯特,F.兰迪斯·马克利,“提取欧拉角的一般公式”,“制导、控制和动力学杂志”,第一卷。29.1页,215-221页。2006年
- 3
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)