四元数学习笔记

 

先理解下面这个博客

复数乘法的几何意义_echo_gou的博客-CSDN博客

我们可以发现复数的乘法可以表示旋转,所以从复数推导而来的四元数也可以表示旋转(为什么可以表示旋转这里不做推导)我们只要会用即可。

如何使用四元数表示旋转

理解SLAM中的四元数基础知识_半不闲居士的博客-CSDN博客_四元数实部

转换关系

一、旋转矩阵,旋转向量,单位四元数的相互转换总结_旋转向量和旋转矩阵转换_Li feilong的博客-CSDN博客

四元数---旋转矩阵(q,R)

q转R:

q=(s,v)

q=q_0+q_1(i)+q_2(j)+q_3(k)

那么:

R转q:

四元数、欧拉角、旋转矩阵、旋转向量之间的转换_欧拉旋转_泠山的博客-CSDN博客

旋转向量---旋转矩阵(θn,R)

旋转向量转旋转矩阵:

罗戈里格斯公式

 旋转矩阵转旋转向量

使用求特征值1的特征向量就是对应的旋转向量,再将其归一化即可:

 

 

四元数--旋转向量(q,θn)

 

b站搜索:四元数的简单通俗用法(Eigen和python)--只喝白开水

 点P绕轴axis旋转角度theta(具体查看B站视频):

#include <Eigen/Dense>
#include <iostream>
#include <cmath>
using namespace Eigen;
using namespace std;
#define _MATH_DEFINES_DEFINED

int main(){

    Vector3f point{1.0, 1.0, 0};   //要进行旋转的向量是(1,1,0)
    //将向量转化为四元数的形式
    Quaternionf p;
    p.vec() = point;
    p.w() = 0;

    //这两行是旋转的轴和角度:绕axis旋转45度
    float theta = 45.0 / 180 * 3.14159265358979323846;
    Vector3f axis{0,0,1};

    //利用公式得到旋转用的四元数(类似于旋转矩阵)
    Quaternionf q{cos(theta/2), sin(theta/2) * axis[0], sin(theta/2) * axis[1], sin(theta/2) * axis[2]};
    cout<<q.matrix()<<endl;

    //利用旋转四元数对一开始的坐标四元数进行q*p*q^-1操作,得到结果
    Quaternionf p_new = q * p * q.inverse();
    cout<<p_new.matrix()<<endl<<endl;

    //将结果转化为三维坐标
    Vector3f point_new=p_new.vec();
    cout<<point_new<<endl;

    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值