本征C++;/Matlab四元数与旋转矩阵失配 P>>四元数计算时,注意到特征C++与Matlab的区别。 在本征C++中,代码 Eigen::Quaterniond q; q.x() = 0.270598; q.y() = 0.653281; q.z() = -0.270598; q.w() = 0.653281; Eigen::Matrix3d R = q.normalized().toRotationMatrix(); std::cout << "R=" << std::endl << R << std::endl;

本征C++;/Matlab四元数与旋转矩阵失配 P>>四元数计算时,注意到特征C++与Matlab的区别。 在本征C++中,代码 Eigen::Quaterniond q; q.x() = 0.270598; q.y() = 0.653281; q.z() = -0.270598; q.w() = 0.653281; Eigen::Matrix3d R = q.normalized().toRotationMatrix(); std::cout << "R=" << std::endl << R << std::endl;,c++,matlab,eigen,quaternions,C++,Matlab,Eigen,Quaternions,然而,在Matlab(使用wxyz)中,我得到了以下结果: q = 0.6533 0.2706 0.6533 -0.2706 >> quat2dcm(q) ans = -0.0000 0 -1.0000 0.7071 0.7072 0 0.7072 -0.7071 -0.0000 这是转置!有人能解释一下发生了什么事吗?我确保wxyz的位置是正确的 谢谢使用Matlab,您正在计算

然而,在Matlab(使用wxyz)中,我得到了以下结果:

q =

    0.6533    0.2706    0.6533   -0.2706

>> quat2dcm(q)

ans =
   -0.0000         0   -1.0000
    0.7071    0.7072         0
    0.7072   -0.7071   -0.0000
这是转置!有人能解释一下发生了什么事吗?我确保wxyz的位置是正确的


谢谢

使用Matlab,您正在计算。它确实是一个与你的特征C++计算的一样,并且同样(所有的行和所有列都有1的范数,或者形成一个向量的垂直集合)。 现在,酉矩阵的逆等于其共轭转置(*),即:

U*U=UU*=I

换句话说,必须发生的是,Matlab的约定与特征C++的相反。

发件人:

点p的坐标可能会因坐标系CS(别名)或点p(alibi)的旋转而改变

在大多数情况下,模糊度的影响等同于旋转矩阵反转的影响(对于这些正交矩阵,等价于矩阵转置)

q =

    0.6533    0.2706    0.6533   -0.2706

>> quat2dcm(q)

ans =
   -0.0000         0   -1.0000
    0.7071    0.7072         0
    0.7072   -0.7071   -0.0000