如何提取 Eigen::Affine3d 变换的非翻译部分



给定一个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));

您可以使用 Eigen::Transform<>::linear() 方法来实现此目的:

normMatrix = m_world.linear();

这是MatrixBase::topLeftCorner()方法的快捷方式:

normMatrix = m_world.matrix().topLeftCorner<3,3>();

最新更新