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

时间:2014-12-24 22:22:04

标签: eigen eigen3

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

1 个答案:

答案 0 :(得分:2)

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

normMatrix = m_world.linear();

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

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