[英]How to convert Euler angles to Quaternions and get the same Euler angles back from Quaternions?
[英]Euler angles change when using as_euler after from_euler
你能解释一下这里发生了什么吗?
from scipy.spatial.transform import Rotation as R
euler_angles1 = [ -150, -180, -120 ]
rotation1 = R.from_euler("xyz", euler_angles1,degrees=True)
print(rotation1.as_euler("xyz",degrees=True))
euler_angles2 = [ -114, -83, -68 ]
rotation2 = R.from_euler("xyz", euler_angles2,degrees=True)
print(rotation2.as_euler("xyz",degrees=True))
Output:
array([ 30., 0., 60])
array([ -114., -83., -68.])
似乎有些角度变成了pi - angle
,而其他角度保持原样。 有规则吗? 是否可以选择让 output 欧拉角与输入的欧拉角保持相同?
Scipy 版本:1.5.4 Numpy 版本:1.19.5
我试过上面的代码。 我的期望是在使用from_euler
和as_euler
后角度将保持不变
他们是等价的。 有一些直觉,可能应该有不止一种方法,一组欧拉角,来实现相同的旋转。
scipy 很可能在内部表示旋转,而不是您传入的欧拉角,而是更通用的东西,如四元数。 因此,当您要求返回欧拉角时,会重新计算欧拉角,并且您收到的值在功能上是等效的。
> rot1 = R.from_euler("xyz", [-150, -180, -120], degrees=True)
> rot2 = R.from_euler("xyz", [30, 0, 60], degrees=True)
> rot1.as_matrix() @ [1, 2, 3]
array([0.29903811, 0.98205081, 3.59807621])
> rot2.as_matrix() @ [1, 2, 3]
array([0.29903811, 0.98205081, 3.59807621])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.