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,即使用純量置後順序。

返回:
quatnumpy.ndarray,形狀 (4,) 或 (N, 4)

形狀取決於用於初始化的輸入形狀。

參考文獻

範例

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