c++ 四元数转欧拉角

两种方法,供你选择;

方法1;

/*
输入:x,y,z,w 为四元数
输出:roll,pitch,yaw欧拉角
**/
static void toEulerAngle(const double x,const double y,const double z,const double w, double& roll, double& pitch, double& yaw)
{// roll (x-axis rotation)double sinr_cosp = +2.0 * (w * x + y * z);double cosr_cosp = +1.0 - 2.0 * (x * x + y * y);roll = atan2(sinr_cosp, cosr_cosp);// pitch (y-axis rotation)double sinp = +2.0 * (w * y - z * x);if (fabs(sinp) >= 1)pitch = copysign(M_PI / 2, sinp); // use 90 degrees if out of rangeelsepitch = asin(sinp);// yaw (z-axis rotation)double siny_cosp = +2.0 * (w * z + x * y);double cosy_cosp = +1.0 - 2.0 * (y * y + z * z);yaw = atan2(siny_cosp, cosy_cosp);
//    return yaw;
}

调用

            cv::Vec3d euler;toEulerAngle(theta[0],theta[1],theta[2],theta[3],euler[0],euler[1],euler[2]);cout <<"euler "<< euler << endl;

方法二-依赖库Eigen;

eigen安装;有就跳过;

sudo apt install libeigen3-dev
#include <Eigen/Dense>
#include <Eigen/Geometry>
#include <Eigen/StdVector>
#include <Eigen/Core>Vector3d Quaterniond2Euler(const double x,const double y,const double z,const double w)
{Eigen::Quaterniond q;q.x() = x;q.y() = y;q.z() = z;q.w() = w;Eigen::Vector3d euler = q.toRotationMatrix().eulerAngles(2, 1, 0);cout << "Quaterniond2Euler result is:" <<endl;cout << "x = "<< euler[2] << endl ;cout << "y = "<< euler[1] << endl ;cout << "z = "<< euler[0] << endl << endl;return euler;
}

调用;theta是四元数;返回 Eigen::Vector3d euler

 Eigen::Vector3d euler = Quaterniond2Euler(theta[0],theta[1],theta[2],theta[3] );

c++ 四元数转欧拉角相关推荐

  1. 四元数和欧拉角的相互转换

    四元数转欧拉角&欧拉角转四元数程序:四元数转欧拉角&欧拉角转四元数程序. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  2. eigen 编译_头条 | 使用eigen实现四元数、欧拉角、旋转矩阵、旋转向量间的转换...

    点击上方蓝字,关注本公众号,获得更多资源上一篇文章介绍了四元数.欧拉角.旋转矩阵.轴角如何相互转换,本篇文章介绍如何用eigen来实现. 旋转向量 1,初始化旋转向量:旋转角为alpha,旋转轴为(x ...

  3. 四元数,欧拉角,旋转矩阵相互转换

    #include <TransForms3d/TransForms.h>/*---------------------------------------角度弧度转换----------- ...

  4. 【飞控理论】【惯性导航基础】二维平面的旋转如何用代数表示?三维平面的旋转如何用代数表示?什么是四元数?四元数、欧拉角、方向余弦之间有什么关系?

    上一篇欧拉角 由于欧拉角在描述三维空间物体旋转问题时存在万向节死锁问题(详情戳这里),所以引入四元数概念. 目录 1.二维平面的旋转 2.三维平面的旋转(什么是四元数) 3.<捷联惯性导航> ...

  5. Matlab ——旋转矩阵,四元数,欧拉角之间的转换

    最近要用这方面的东西,整理,记录,分享一下 基于Matlab现有函数下的内容 Matlab --旋转矩阵,四元数,欧拉角之间的转换 旋转矩阵 dcm R 四元数 quat q = [q0 q1 q2 ...

  6. unity中的四元数,欧拉角,方向向量之间的相互转换方法。

    四元数: 到欧拉角:quaternion.eulerAngles 到方向向量:(quaternion * Vector3.forward).normalized 欧拉角: 到四元数:Quaternio ...

  7. unity 四元数和欧拉角的相互转换

    四元数和欧拉角相互转换 //四元数转化成欧拉角 Vector3 v3=transform.rotation.eulerAngles; //欧拉角转换成四元数 Quaternion rotation = ...

  8. 【Unity3D 灵巧小知识点】☀️ | Unity 四元数、欧拉角 与 方向向量 之间转换

    Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...

  9. ROS中四元数、欧拉角、旋转矩阵等格式转换

    未完- ROS接收到odometry格式消息: nav_msgs::Odometry pos_msg 具有: pos_msg.pose.pose.orientation.x; // xyzw pos_ ...

  10. matlab和Eigen库中的一些旋转矩阵(方向余弦矩阵)、四元数和欧拉角之间的转换和绘图的注意事项

    最近用matlab和Eigen库中的一些旋转矩阵(方向余弦矩阵).四元数和欧拉角之间的转换和绘图,弄得我有些头疼,把遇到的问题记录一下,以防以后又脑阔疼....有不同的理解可以再评论区批评指正- 主要 ...

最新文章

  1. QTableView中修改某个单元格或者行或者列内容颜色
  2. 用XCA(X Certificate and key management)可视化程序管理SSL 证书(2)--生成SSL证书请求...
  3. 机器学习和深度学习资料整理
  4. 安卓进阶系列-02搜索框(PersistentSearch)的使用
  5. linux 进程映射空间 libc,为什么不能在64位内核的32位Linux进程中映射(MAP_FIXED)最高虚拟页面?...
  6. java 异常抛出 顺序_java异常抛出时间顺序
  7. Android开发系列之创建自定义控件
  8. C++总结笔记(二)——指针
  9. python 简单web音频_Python Twisted web服务器音频fi
  10. Android 3D系列之基本概念篇
  11. Angular讲义 ---作用域
  12. php预编译mysql扩展_PHP-Mysqli扩展库的预编译
  13. 看雪论坛论坛小测试的答案
  14. shell中引号的应用
  15. Scala简介与Scala的下载安装
  16. 007数据分析能力:业务题
  17. 一个简单的2048小游戏
  18. Python的模式匹配
  19. 数据结构实战(十)——家谱管理系统
  20. Unity捕鱼达人5-----鱼群的生成

热门文章

  1. 东大22春《计算机应用基础》在线平时作业2题目非答案
  2. 通过Safari与mobileconfig获取iOS设备UDID(设备唯一标识符)
  3. Unity双相机Camera,将虚拟相机视角画面显示在平面Plane上
  4. linux查看gc日志,将GC日志输出到文件
  5. 中产与“伪中产”的对决:正面刚星巴克,Luckin果真很 Luck
  6. 新版Burp Suite安装
  7. HP580服务器系统安装,hp580服务器配置
  8. hiredis的使用
  9. 判断浏览器版本并且对使用低版本浏览器的用户进行提示
  10. 树莓派使用硬件加速视频转码