日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Eigen库:(三)空间变换

發布時間:2023/12/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Eigen库:(三)空间变换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們將介紹幾何模塊提供的處理2D和3D旋轉以及投影或仿射變換的方法。

1. 變換類型

// 下面的類型將d換成f就可以得到單精度的數據結構 Eigen::Matrix3d; //旋轉矩陣3*3 Eigen::AngleAxisd; //旋轉向量3*1 Eigen::Vector3d; //歐拉角3*1 Eigen::Quaterniond; //四元數4*1 Eigen::Isometry3d; //歐氏變換矩陣4*4 Eigen::Affine3d; //仿射變換4*4 Eigen::Projective3d; //射影變換

2. 旋轉定義

//旋轉向量 AngleAxisd rotation_vector(M_PI / 4,Vector3d(0,0,1)); //沿Z軸旋轉45度 //旋轉矩陣 Matrix3d rotation_matrix = Matrix3d::Identity(); rotation_matrix = rotation_vector.toRotationMatrix(); //用旋轉向量給旋轉矩陣賦值 rotation_matrix = rotation_vector.matrix(); //和toRotationMatrix()等價 //歐拉角 Vector3d euler_angles = rotation_matrix.eulerAngles(2,1,0); //ZYX順序,將旋轉矩陣直接轉化為歐拉角 //四元數 Quaterniond q = Quaterniond(rotation_vector); //用旋轉向量來初始化,反過來也行 q = Quaterniond(rotation_matrix); //用旋轉矩陣來初始化 //Quaterniond q(0.35,0.2,0.3,0.1); //直接用構造器定義也行

3. 歐氏變換定義

//歐氏變換 Isometry3d T = Isometry3d::Identity(); T.rotate(AngleAxisd(M_PI / 4,Vector3d(0,0,1))); // 按照旋轉向量進行旋轉 T.pretranslate(Vector3d(1,3,4)); //pretranslate是加上t, translate是加上Rt cout<<"T(pretranslate) = \n"<<T.matrix()<<endl;T = Isometry3d::Identity(); T.rotate(AngleAxisd(M_PI / 4,Vector3d(0,0,1))); // 按照旋轉向量進行旋轉 //T = Isometry3d(AngleAxisd(M_PI / 4,Vector3d(0,0,1))); //直接用構造器定義旋轉變換也行 T.translate(Vector3d(1,3,4)); //pretranslate是加上t, translate是加上Rt cout<<"T(translate) = \n"<<T.matrix()<<endl;結果: T(pretranslate) = 0.707107 -0.707107 0 10.707107 0.707107 0 30 0 1 40 0 0 1 T(translate) = 0.707107 -0.707107 0 -1.414210.707107 0.707107 0 2.828430 0 1 40 0 0 1

4. 旋轉變換

//用AngleAxis進行坐標變換 Vector3d v(1,0,0); Vector3d v_rotated = rotation_vector * v; //用旋轉矩陣進行坐標變換 v_rotated = rotation_matrix * v; //用四元數進行坐標變換,使用重載的乘法即可 v_rotated = q * v; //注意數學上是qvq^{-1}//這里沒用歐拉角進行坐標變換,應該也能用的,可以自己搜一下

5. 歐氏變換

Vector3d v(1,0,0); Vector3d v_transformed = T * v;

總結

以上是生活随笔為你收集整理的Eigen库:(三)空间变换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。