我试图找到欧拉角,它允许从点进行转换。
A
指向
B
三维空间。
考虑归一化向量
A = [1, 0, 0]
和
B = [0.32 0.88 -0.34]
.
我通过计算
交叉积
A Ã B
我得到了旋转轴。这个
角
之间
A
和
B
由给出
tanâ»Â¹(||cross||, A·B)
,在哪里
A·B
是
DOT产品
之间
A
和
B
.
这给了我旋转向量
rotvec = [0 0.36 0.93 1.24359531111]
,即
rotvec = [A Ã B; angle]
(交叉积是标准化的)。
现在我的问题是:
如何从这里移动以获得与转换相对应的欧拉角
一
到
乙
?
在matlab中,函数
vrrotvec2mat
接收旋转矢量作为输入并输出旋转矩阵。然后是函数
rotm2eul
应返回相应的欧拉角。我得到以下结果(以弧度表示):
[0.2456 0.3490 1.2216]
,根据
XYZ
公约。然而,这并不是预期的结果。
正确答案是
[0 0.3490 1.2216]
相当于旋转
20°
和
70°
在里面
Y
和
Z
,分别。
当我使用
eul2rot([0 0.3490 1.2216])
用
eul2rot
取自
here
)为了验证产生的旋转矩阵,这个矩阵与我使用时得到的矩阵不同。
vrrotvec2mat(rotvec)
.
我还有一个python spinet,它产生的结果与上面描述的完全相同。
---使用Transform3D的python(2.7)---
import numpy as np
import transforms3d
cross = np.cross(A, B)
dot = np.dot(A, B.transpose())
angle = math.atan2(np.linalg.norm(cross), dot)
rotation_axes = sklearn.preprocessing.normalize(cross)
rotation_m = transforms3d.axangles.axangle2mat(rotation_axes[0], angle, True)
rotation_angles = transforms3d.euler.mat2euler(rotation_m, 'sxyz')
我这里缺少什么?我应该做什么?
谢谢你