from_davenport#
- classmethod Rotation.from_davenport(cls, axes, order, angles, degrees=False)#
從 Davenport 角度初始化。
3-D 旋轉可以使用繞軸序列的三次旋轉來表示。
這三個旋轉可以在全域參考框架(外在)或以物體為中心的參考框架(內在)中進行,後者附著在旋轉下的物體上並隨之移動 [1]。
對於 Euler 角和 Davenport 角,連續軸必須是正交的(
axis2
與axis1
和axis3
都正交)。對於 Euler 角,axis1
或axis3
之間還有一個額外的關係,有兩種可能性axis1
和axis3
也正交(不對稱序列)axis1 == axis3
(對稱序列)
對於 Davenport 角度,最後這種關係被放寬 [2],並且僅保留連續正交軸要求。
- 參數:
- axesarray_like,形狀為 (3,) 或 ([1 或 2 或 3], 3)
旋轉軸,如果是一維的。如果是二維的,則描述旋轉軸的序列,其中每個 axes[i, :] 是第 i 個軸。如果給定多個軸,則第二個軸必須與第一個和第三個軸都正交。
- order字串
如果等於 'e' 或 'extrinsic',則序列將是外在的。如果等於 'i' 或 'intrinsic',則序列將被視為內在的。
- anglesfloat 或 array_like,形狀為 (N,) 或 (N, [1 或 2 或 3])
以弧度(degrees 為 False)或度數(degrees 為 True)指定的 Euler 角。對於單軸,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). Euler 角的推廣. Journal of the Astronautical Sciences. 51. 123-132. 10.1007/BF03546304.
範例
>>> from scipy.spatial.transform import Rotation as R
當我們使用標準基底軸時,Davenport 角度是 Euler 角的推廣
>>> 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,)
在這種情況下,它等效於 Euler 角
>>> 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]