eigen库相关代码

#include <iostream>
#include <Eigen/Core>
#include "Eigen/Dense"
#include <Eigen/Geometry>
using namespace std;
int main() {
    Eigen::Matrix3d rotation_Matrid;//旋转矩阵
    Eigen::AngleAxisd rotation_vector(M_PI / 4, Eigen::Vector3d(0, 0, 1));//旋转向量
    Eigen::Vector3d eluerangle(2,1,0);//欧拉角
    Eigen::Quaterniond quaterniond(rotation_vector);//四元数
    Eigen::Isometry3d isometry3D_T= Eigen::Isometry3d::Identity();//欧式变换矩阵 初始化要为单位矩阵!!!!!
    Eigen::Affine3d  affine3D;//仿射变换
    Eigen::Projective3d projective3D;//射影变换

    rotation_Matrid = rotation_vector.toRotationMatrix();//旋转向量->旋转矩阵3x3
    Eigen::Vector3d eluerangle_1 = rotation_Matrid.eulerAngles(2, 1, 0);//旋转矩阵->欧拉角  ZYX旋转  2:Z轴 1:Y轴 0:X轴 (2,1,2)-> ZYZ

    Eigen::Vector3d v1(1,1,1);
    Eigen::Vector3d v_rota = rotation_Matrid * v1;//用旋转矩阵变换
    Eigen::Vector3d v_angle = rotation_vector * v1;//用旋转向量变换

    isometry3D_T.rotate(rotation_vector);
    isometry3D_T.pretranslate(Eigen::Vector3d(1, 3, 4));
    Eigen::Vector3d v_transform = isometry3D_T*v1;//v_1(世界坐标系)变换到T的坐标系下
    //cout<<isometry3D_T.matrix()<<endl;

    cout<<quaterniond<<endl;
    Eigen::Quaterniond Q(rotation_Matrid);
    Q.normalize();//必须归一化
    Eigen::Matrix3d mat_from_q(Q);
    Eigen::AngleAxisd rotvec_from_q(Q);
    Eigen::Vector3d v3= Q*v1;//v1坐标经过Q旋转变换后的坐标位置 在数学上是q*v1()*q-1
    cout<<v3.matrix()<<endl;
    Eigen::Quaterniond Q_v1(0,1,1,1);//v1用四元数表示
    cout<<(Q*Q_v1*Q.inverse()).coeffs()<<endl;

    //测试
    Eigen::Matrix3d matrix_rotation;
    Eigen::AngleAxisd vector_rotation(M_PI/2,Eigen::Vector3d(0,0,1));
    matrix_rotation=vector_rotation.toRotationMatrix();
    Eigen::Isometry3d T =Eigen::Isometry3d::Identity();//初始化单位矩阵
    T.rotate(matrix_rotation);
    T.pretranslate(Eigen::Vector3d(1,1,1));
    Eigen::Vector3d v2(1,1,1);
    Eigen::Vector3d v_l=T.inverse()*v2;




    return 0;
}

  

posted @ 2022-01-21 16:46  zlj-xkbl  阅读(276)  评论(0)    收藏  举报