from_davenport#
- classmethod Rotation.from_davenport(cls, axes, order, angles, degrees=False)#
从 Davenport 角初始化。
3D 旋转可以使用围绕一系列轴的 3 个旋转序列来表示。
这三个旋转可以在全局参考系(外在)或以物体为中心的参考系(内在)中进行,后者附加到正在旋转的物体上并随之移动 [1]。
对于欧拉角和 Davenport 角,连续轴必须正交(
axis2
与axis1
和axis3
都正交)。 对于欧拉角,axis1
或axis3
之间存在额外的关系,有两种可能性axis1
和axis3
也正交(非对称序列)axis1 == axis3
(对称序列)
对于 Davenport 角,最后的关系被放宽 [2],仅保持连续正交轴要求。
- 参数:
- axesarray_like,形状 (3,) 或 ([1 或 2 或 3], 3)
旋转轴,如果是一维。 如果是二维,则描述旋转轴的序列,其中每个 axes[i, :] 是第 i 个轴。 如果给出多个轴,则第二个轴必须与第一个和第三个轴都正交。
- order字符串
如果它等于 ‘e’ 或 ‘extrinsic’,则序列将是外在的。 如果它等于 ‘i’ 或 ‘intrinsic’,则序列将被视为内在的。
- angles浮点数或 array_like,形状 (N,) 或 (N, [1 或 2 或 3])
以弧度(degrees 为 False)或度数(degrees 为 True)指定的欧拉角。 对于单轴,angles 可以是
单个值
形状为 (N,) 的 array_like,其中每个 angle[i] 对应于单个旋转
形状为 (N, 1) 的 array_like,其中每个 angle[i, 0] 对应于单个旋转
对于 2 个和 3 个轴,angles 可以是
形状为 (W,) 的 array_like,其中 W 是 axes 的行数,它对应于具有 W 轴的单次旋转
形状为 (N, W) 的 array_like,其中每个 angle[i] 对应于描述单次旋转的一系列 Davenport 角
- degreesbool,可选
如果为 True,则假设给定的角度以度为单位。 默认为 False。
- 返回:
- rotation
Rotation
实例 包含由给定轴周围的旋转序列以及给定角度表示的旋转的对象。
- rotation
参考文献
[2]Shuster, Malcolm & Markley, Landis. (2003). Generalization of the Euler Angles. Journal of the Astronautical Sciences. 51. 123-132. 10.1007/BF03546304.
示例
>>> from scipy.spatial.transform import Rotation as R
当我们使用规范基轴时,Davenport 角是欧拉角的概括
>>> ex = [1, 0, 0] >>> ey = [0, 1, 0] >>> ez = [0, 0, 1]
使用给定的轴序列初始化单个旋转
>>> axes = [ez, ey, ex] >>> r = R.from_davenport(axes, 'extrinsic', [90, 0, 0], degrees=True) >>> r.as_quat().shape (4,)
在这种情况下,它等效于欧拉角
>>> r.as_euler('zyx', degrees=True) array([90., 0., -0.])
在一个对象中初始化多个旋转
>>> r = R.from_davenport(axes, 'extrinsic', [[90, 45, 30], [35, 45, 90]], degrees=True) >>> r.as_quat().shape (2, 4)
也可以仅使用一个或两个轴
>>> r = R.from_davenport([ez, ex], 'extrinsic', [[90, 45], [35, 45]], degrees=True) >>> r.as_quat().shape (2, 4)
可以使用非规范轴,并且只要连续轴正交,它们就不需要标准化
>>> e1 = [2, 0, 0] >>> e2 = [0, 1, 0] >>> e3 = [1, 0, 1] >>> axes = [e1, e2, e3] >>> r = R.from_davenport(axes, 'extrinsic', [90, 45, 30], degrees=True) >>> r.as_quat() [ 0.701057, 0.430459, -0.092296, 0.560986]