當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy Rotation.as_euler用法及代碼示例


本文簡要介紹 python 語言中 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,則返回的角度以度為單位,否則以弧度為單位。默認為假。

返回

angles ndarray,形狀 (3,) 或 (N, 3)

形狀取決於用於初始化對象的輸入的形狀。返回的角度在以下範圍內:

  • 第一個角度屬於 [-180, 180] 度(含)

  • 第三個角度屬於 [-180, 180] 度(包括)

  • 第二個角度屬於:

    • [-90, 90] degrees if all axes are different (like xyz)

    • [0, 180] degrees if first and third axes are the same (like zxz)

參考

[2]

Bernardes E, Viollet S (2022) 四元數到歐拉角的轉換:一種直接、通用且計算高效的方法。 《公共科學 Library 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)

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.spatial.transform.Rotation.as_euler。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。