我使用 Eigen 库将矩阵转换为四元数,但是当我将其中一个矩阵转换为四元数并将其烧回时,它变成了另一个矩阵,即单位矩阵。我使用的旋转矩阵是从变换矩阵分解而来的。
Eigen::Matrix3f R3d = R.topLeftCorner<3,3>();
*Rquat = R3d;
R3d = (*Rquat).normalized().toRotationMatrix();
什么可能导致这个问题?这是更改为四元数之前的矩阵 https://i.stack.imgur.com/0smtg.png
and 这是我将它从四元数转回来时的矩阵 https://i.stack.imgur.com/eT88T.png
刚刚检查了实施情况Eigen 矩阵到四元数的转换 https://bitbucket.org/eigen/eigen/src/2b969e50885e26f0ca909ebb2b0263cd9c649bd6/Eigen/src/Geometry/Quaternion.h#Quaternion.h-760。它基于 Ken Shoemake 的“四元数微积分和快速动画”。
正如人们在分析源时所看到的,这假设矩阵确实是旋转矩阵(或接近于 1)。事实上所有对称矩阵M.trace()>0
将产生(缩放的)恒等四元数。如果您对无效旋转矩阵有任何其他期望,则需要实现自己的转换方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)