我使用Eigen库将矩阵转换为四元数,但当我将其中一个矩阵转换为四元数并重新转换回去时,它变成了另一个矩阵,即单位矩阵。我使用的旋转矩阵是从变换矩阵分解而来的。
Eigen::Matrix3f R3d = R.topLeftCorner<3,3>();
*Rquat = R3d;
R3d = (*Rquat).normalized().toRotationMatrix();
出现这个问题的原因可能是什么? 这是转换为四元数之前的矩阵
我使用Eigen库将矩阵转换为四元数,但当我将其中一个矩阵转换为四元数并重新转换回去时,它变成了另一个矩阵,即单位矩阵。我使用的旋转矩阵是从变换矩阵分解而来的。
Eigen::Matrix3f R3d = R.topLeftCorner<3,3>();
*Rquat = R3d;
R3d = (*Rquat).normalized().toRotationMatrix();
出现这个问题的原因可能是什么? 这是转换为四元数之前的矩阵
刚刚检查了Eigen矩阵转四元数的实现。它基于Ken Shoemake的“四元数微积分和快速动画”。
当分析源代码时,可以看到它假设矩阵确实是旋转矩阵(或接近旋转矩阵)。事实上,所有对称矩阵且M.trace()>0
都将导致一个(缩放后的)单位四元数。如果您希望在无效旋转矩阵的情况下获得其他结果,则需要实现自己的转换方法。