eigen 空间任意轴旋转

eigen 空间任意轴旋转

从一个以弧度为单位的角度和一个必须归一化构造并初始化角度轴旋转。

复制代码
int main()
{
    Eigen::AngleAxisd v_r(M_PI/4.0, Eigen::Vector3d(1.0,0,0));//任意轴旋转

    Eigen::Quaterniond q(v_r);
    q.normalize();
    Eigen::Vector3d t(0.1, 2.0, 3.0);

    //Eigen::AngleAxisd delta_r(M_PI / 4.0, Eigen::Vector3d(-0.7548, 0, 0).normalized());//任意轴旋转  转轴必须归一化
    //Eigen::Quaterniond deltaQ(delta_r);
    //deltaQ.normalize();
    //Eigen::Quaterniond q_final = (deltaQ*q).normalized();

    Eigen::Vector3d v0(0, 0, 1.0);
    Eigen::Vector3d v0_t = q * v0 + t;

    Eigen::Vector3d v1 = v0_t - t;
    Eigen::Vector3d vv_x = v1.cross(v0);
    double radian_angle = atan2(v0.cross(v1).norm(), v1.transpose() * v0);

    Eigen::AngleAxisd delta_r(radian_angle, vv_x.normalized());//任意轴旋转
    Eigen::Quaterniond deltaQ(delta_r);
    deltaQ.normalize();

    Eigen::Quaterniond q_final = (deltaQ*q).normalized();
    Eigen::Vector3d eulerAngle = q_final.matrix().eulerAngles(2, 1, 0);
    Eigen::Vector3d v_final = deltaQ * v1;

    return 0;
}
复制代码

  示意图:

 

posted @   玥茹苟  阅读(384)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示