2014-12-24 2 views
1

При преобразовании Eigen::Affine3d, как вы эффективно извлекаете Eigen::Matrix3d, состоящий из верхнего левого угла 3 × 3 аффинной матрицы 4 × 4?Как извлечь неотправляемую часть преобразования Eigen :: Affine3d?

В настоящее время я использую следующий, не изящный (но рабочий) синтаксис:

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

ответ

2

Вы можете использовать метод Eigen::Transform<>::linear() для этой цели:

normMatrix = m_world.linear(); 

который является аббревиатурой для метода MatrixBase::topLeftCorner() :

normMatrix = m_world.matrix().topLeftCorner<3,3>(); 
Смежные вопросы