给定Eigen::Affine3d
变换,如何有效地提取由仿射4×4矩阵的左上角3×3角组成的Eigen::Matrix3d
?
目前我使用以下非优雅(但有效)的语法:
Eigen::Affine3d m_world;
:
Eigen::Matrix3d normMatrix;
normMatrix.col(0) = Vec3(m_world(0,0),m_world(1,0),m_world(2,0));
normMatrix.col(1) = Vec3(m_world(0,1),m_world(1,1),m_world(2,1));
normMatrix.col(2) = Vec3(m_world(0,2),m_world(1,2),m_world(2,2));
答案 0 :(得分:2)
您可以使用Eigen::Transform<>::linear()
方法实现此目的:
normMatrix = m_world.linear();
这是MatrixBase::topLeftCorner()
方法的快捷方式:
normMatrix = m_world.matrix().topLeftCorner<3,3>();