scipy.spatial.transform.Rotation.
as_quat#
- Rotation.as_quat(self, canonical=False, *, scalar_first=False)#
表示為四元數。
3 維空間中的旋轉可以使用單位範數四元數表示 [1]。
四元數的 4 個分量分為純量部分
w
和向量部分(x, y, z)
,可以從旋轉的角度theta
和軸n
表示如下w = cos(theta / 2) x = sin(theta / 2) * n_x y = sin(theta / 2) * n_y z = sin(theta / 2) * n_z
有 2 種約定來排序四元數中的分量
純量優先順序 –
(w, x, y, z)
純量置後順序 –
(x, y, z, w)
此選擇由 scalar_first 參數控制。預設情況下,此參數為 False,並使用純量置後順序。
從四元數到旋轉的映射是二對一的,即四元數
q
和-q
表示相同的空間旋轉,其中-q
只是反轉每個分量的符號。- 參數:
- canonicalbool,預設值 False
是否將旋轉空間的冗餘雙重覆蓋映射到唯一的「標準」單一覆蓋。如果為 True,則從 {q, -q} 中選擇四元數,使得 w 項為正數。如果 w 項為 0,則選擇四元數,使得 x、y 和 z 項的第一個非零項為正數。
- scalar_firstbool,選用
純量分量在前還是置後。預設值為 False,即使用純量置後順序。
- 返回:
- quat
numpy.ndarray
,形狀 (4,) 或 (N, 4) 形狀取決於用於初始化的輸入形狀。
- quat
參考文獻
範例
>>> from scipy.spatial.transform import Rotation as R >>> import numpy as np
旋轉可以表示為四元數,具有純量置後(預設)或純量優先分量順序。這會針對單次旋轉顯示
>>> r = R.from_matrix(np.eye(3)) >>> r.as_quat() array([0., 0., 0., 1.]) >>> r.as_quat(scalar_first=True) array([1., 0., 0., 0.])
當多個旋轉儲存在單個 Rotation 物件中時,結果將是一個 2 維陣列
>>> r = R.from_rotvec([[np.pi, 0, 0], [0, 0, np.pi/2]]) >>> r.as_quat().shape (2, 4)
四元數可以從旋轉空間的冗餘雙重覆蓋映射到具有正 w 項的標準表示法。
>>> r = R.from_quat([0, 0, 0, -1]) >>> r.as_quat() array([0. , 0. , 0. , -1.]) >>> r.as_quat(canonical=True) array([0. , 0. , 0. , 1.])