c – 特征将旋转和平移组合成一个矩阵

前端之家收集整理的这篇文章主要介绍了c – 特征将旋转和平移组合成一个矩阵前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个旋转矩阵rot(Eigen :: Matrix3d)和一个平移向量transl(Eigen :: Vector3d),我希望它们在4×4变换矩阵中一起.我只是因为我的生活无法弄清楚如何在Eigen中做到这一点.我认为Affine可以以某种方式使用,但我不明白它是如何工作的.

基本上我想要How translation a matrix(4×4) in Eigen?Multiplying Transform and Matrix types in Eigen的组合

我的代码(由于我不理解Affine如何工作而无法编译)如下所示:

  1. Eigen::Affine3d r(rot);
  2. Eigen::Affine3d t(transl);
  3. Eigen::Matrix4d m = t.matrix();
  4. m *= r.matrix();

解决方法

你没有发布编译错误,也没有发布什么是rot和transl.下面是一个工作
示例显示,如何创建4×4转换矩阵.
  1. #include <Eigen/Geometry>
  2.  
  3. Eigen::Affine3d create_rotation_matrix(double ax,double ay,double az) {
  4. Eigen::Affine3d rx =
  5. Eigen::Affine3d(Eigen::AngleAxisd(ax,Eigen::Vector3d(1,0)));
  6. Eigen::Affine3d ry =
  7. Eigen::Affine3d(Eigen::AngleAxisd(ay,Eigen::Vector3d(0,1,0)));
  8. Eigen::Affine3d rz =
  9. Eigen::Affine3d(Eigen::AngleAxisd(az,1)));
  10. return rz * ry * rx;
  11. }
  12.  
  13. int main() {
  14. Eigen::Affine3d r = create_rotation_matrix(1.0,1.0,1.0);
  15. Eigen::Affine3d t(Eigen::Translation3d(Eigen::Vector3d(1,2)));
  16.  
  17. Eigen::Matrix4d m = (t * r).matrix(); // Option 1
  18.  
  19. Eigen::Matrix4d m = t.matrix(); // Option 2
  20. m *= r.matrix();
  21. return 0;
  22. }

猜你在找的C&C++相关文章