matlab 三维点 旋转矩阵,两个三维点的欧拉角和旋转矩阵

我试图找到欧拉角,它允许从点进行转换。

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')

我这里缺少什么?我应该做什么?

谢谢你

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值