用Eigen3插值两个矩阵

时间:2015-01-25 21:14:06

标签: c++ matrix interpolation eigen quaternions

我有两个转换矩阵,我想在它们之间进行插值以获得动画。 如上所述here,不可能简单地插入单个值。有没有一种简单的方法来实现这一目标? (我使用Eigen3)

我的想法:

Eigen::Matrix4f m1; //Transformation Matrix 1
Eigen::Matrix4f m2; //Transformation Matrix 2
Eigen::Quaternion<float> quat1(m1.block<3,3>(0,0)); //This extracts rotation matrix
Eigen::Quaternion<float> quat2(m2.block<3,3>(0,0));
quat1.slerp(t,quat2); //This interpolates

//Now i need a 4x4 Matrix again
Eigen::Matrix3f rot=quat1.toRotationMatrix();
Eigen::Matrix4f newmatrix;
newmatrix.block<3,3>(0,0)=rot;

我的代码是否有问题,是否有一种简单的方法可以完成(旋转)矩阵插值?

1 个答案:

答案 0 :(得分:0)

  1. 修改此行

    Eigen::Quaternion<float> quat3  = quat1.slerp(t,quat2); //This interpolates
    //Now i need a 4x4 Matrix again
    Eigen::Matrix3f rot = quat3.toRotationMatrix();
    
  2. 此外,插入线性转换组件(m1的最后一列和m2

  3. 请确保m1m2是欧几里德变换,而不是投射。