我使用 Eigen 库将矩阵转换为四元数,但是当我将其中一个矩阵转换为四元数并将其烧回时,它变成了另一个矩阵,即单位矩阵。我使用的旋转矩阵是从变换矩阵分解而来的。
Eigen::Matrix3f R3d = R.topLeftCorner<3,3>();
*Rquat = R3d;
R3d = (*Rquat).normalized().toRotationMatrix();
什么可能导致这个问题? This is the matrix before change to quaternion
最佳答案
刚刚检查了 Eigen's matrix to quaternion conversion 的实现.它基于 Ken Shoemake 的“四元数微积分和快速动画”。
正如人们在分析源代码时所看到的那样,这假设矩阵确实是一个旋转矩阵(或接近一个)。事实上,所有具有 M.trace()>0
的对称矩阵都会产生(缩放的)恒等四元数。如果您对无效旋转矩阵有任何其他期望,则需要实现您自己的转换方法。
关于matrix - Eigen :矩阵到四元数和后面有不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43896041/