c++ 四元数转欧拉角
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
- eigen 编译_头条 | 使用eigen实现四元数、欧拉角、旋转矩阵、旋转向量间的转换...
点击上方蓝字,关注本公众号,获得更多资源上一篇文章介绍了四元数.欧拉角.旋转矩阵.轴角如何相互转换,本篇文章介绍如何用eigen来实现. 旋转向量 1,初始化旋转向量:旋转角为alpha,旋转轴为(x ...
- 四元数,欧拉角,旋转矩阵相互转换
#include <TransForms3d/TransForms.h>/*---------------------------------------角度弧度转换----------- ...
- 【飞控理论】【惯性导航基础】二维平面的旋转如何用代数表示?三维平面的旋转如何用代数表示?什么是四元数?四元数、欧拉角、方向余弦之间有什么关系?
上一篇欧拉角 由于欧拉角在描述三维空间物体旋转问题时存在万向节死锁问题(详情戳这里),所以引入四元数概念. 目录 1.二维平面的旋转 2.三维平面的旋转(什么是四元数) 3.<捷联惯性导航> ...
- Matlab ——旋转矩阵,四元数,欧拉角之间的转换
最近要用这方面的东西,整理,记录,分享一下 基于Matlab现有函数下的内容 Matlab --旋转矩阵,四元数,欧拉角之间的转换 旋转矩阵 dcm R 四元数 quat q = [q0 q1 q2 ...
- unity中的四元数,欧拉角,方向向量之间的相互转换方法。
四元数: 到欧拉角:quaternion.eulerAngles 到方向向量:(quaternion * Vector3.forward).normalized 欧拉角: 到四元数:Quaternio ...
- unity 四元数和欧拉角的相互转换
四元数和欧拉角相互转换 //四元数转化成欧拉角 Vector3 v3=transform.rotation.eulerAngles; //欧拉角转换成四元数 Quaternion rotation = ...
- 【Unity3D 灵巧小知识点】☀️ | Unity 四元数、欧拉角 与 方向向量 之间转换
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...
- ROS中四元数、欧拉角、旋转矩阵等格式转换
未完- ROS接收到odometry格式消息: nav_msgs::Odometry pos_msg 具有: pos_msg.pose.pose.orientation.x; // xyzw pos_ ...
- matlab和Eigen库中的一些旋转矩阵(方向余弦矩阵)、四元数和欧拉角之间的转换和绘图的注意事项
最近用matlab和Eigen库中的一些旋转矩阵(方向余弦矩阵).四元数和欧拉角之间的转换和绘图,弄得我有些头疼,把遇到的问题记录一下,以防以后又脑阔疼....有不同的理解可以再评论区批评指正- 主要 ...
最新文章
- 用 eclipse SVN 插件共享项目
- 1990: 分解质因数
- spring coud feign
- 卷积神经网络CNNs 为什么要用relu作为激活函数?
- pytorch常用函数API简析与汇总——以备查询
- C# WinForm 中Label自动换行 解决方法
- 流水灯verilog实验原理_IC设计实例解析之“流水线技术”
- python读取文件最后几行_如何用python获取文件的最后一行,文件可能会比较大
- iis configuration error
- Android视频: YUV转RGB
- Linux文件上传下载sz 和 rz 命令
- the true story about using data mining to identify a relation between sales of beer and diapers
- 《Java程序设计》期末复习资料
- 腾讯云IM购买和接入指南
- python获取已打开的网页内容_用Python获取网页数据
- 12年双11:从春雷到秋实,为复苏喝彩
- Ubuntu下交叉编译Qt库并移植至ARM板上
- Amazon 亚马逊 AWS S3 跨源资源共享 (CORS)设置
- 计算机科学新技术新应用发展,新技术的发展和应用
- 数据库常用增删改查sql语句(二)