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. 用 eclipse SVN 插件共享项目
  2. 1990: 分解质因数
  3. spring coud feign
  4. 卷积神经网络CNNs 为什么要用relu作为激活函数?
  5. pytorch常用函数API简析与汇总——以备查询
  6. C# WinForm 中Label自动换行 解决方法
  7. 流水灯verilog实验原理_IC设计实例解析之“流水线技术”
  8. python读取文件最后几行_如何用python获取文件的最后一行,文件可能会比较大
  9. iis configuration error
  10. Android视频: YUV转RGB
  11. Linux文件上传下载sz 和 rz 命令
  12. the true story about using data mining to identify a relation between sales of beer and diapers
  13. 《Java程序设计》期末复习资料
  14. 腾讯云IM购买和接入指南
  15. python获取已打开的网页内容_用Python获取网页数据
  16. 12年双11:从春雷到秋实,为复苏喝彩
  17. Ubuntu下交叉编译Qt库并移植至ARM板上
  18. Amazon 亚马逊 AWS S3 跨源资源共享 (CORS)设置
  19. 计算机科学新技术新应用发展,新技术的发展和应用
  20. 数据库常用增删改查sql语句(二)

热门文章

  1. wifi信号桥怎么设置_WiFi信号桥是什么意思
  2. 循环码的c语言,循环码的概念及性质.doc
  3. AR9344开发环境的搭建和编译固件
  4. R语言基于copula的贝叶斯分层混合模型的诊断准确性研究
  5. 通过帮助中心提高客户满意度,帮助中心的最佳实践方式
  6. 《Python网络爬虫从入门到实践 第2版》第15章 爬虫实践二:知乎Live
  7. vba获取html代码数据,用VBA实现网页数据获取
  8. Charles 注册码
  9. 测试的价值不仅仅是找
  10. GD32F405时钟配置