scipy.spatial.transform.Rotation.
as_euler#
- Rotation.as_euler(self, seq, degrees=False)#
表示為歐拉角。
任何方位都可以表示為 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)
參考文獻
[2]Bernardes E, Viollet S (2022) Quaternion to Euler angles conversion: A direct, general and computationally efficient method. PLoS ONE 17(11): e0276302. https://doi.org/10.1371/journal.pone.0276302
範例
>>> from scipy.spatial.transform import Rotation as R >>> import numpy as np
表示單次旋轉
>>> 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)