在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点。本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系:

图1 3D Cartesian coordinate System (from wikipedia)

定义分别为绕Z轴、Y轴、X轴的旋转角度,如果用Tait-Bryan angle表示,分别为Yaw、Pitch、Roll。

图2 Tait-Bryan angles (from wikipedia)

一、四元数的定义

通过旋转轴和绕该轴旋转的角度可以构造一个四元数:

其中是绕旋转轴旋转的角度,为旋转轴在x,y,z方向的分量(由此确定了旋转轴)。

二、欧拉角到四元数的转换

三、四元数到欧拉角的转换

       arctanarcsin的结果是,这并不能覆盖所有朝向(对于的取值范围已经满足),因此需要用atan2来代替arctan

四、在其他坐标系下使用

在其他坐标系下,需根据坐标轴的定义,调整一下以上公式。如在Direct3D中,笛卡尔坐标系的X轴变为Z轴,Y轴变为X轴,Z轴变为Y轴(无需考虑方向)。

五、示例代码

http://www.cppblog.com/Files/heath/Euler2Quaternion.rar
Demo渲染两个模型,左边使用欧拉角,右边使用四元数,方向键Up、Left、Right旋转模型。

参考文献:

[1] http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles

[2] Ken Shoemake, Animating Rotation with Quaternion Curves, 1985

四元数与欧拉角之间的转换相关推荐

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

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

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

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

  3. 转换矩阵、平移矩阵、旋转矩阵关系以及python实现旋转矩阵、四元数、欧拉角之间转换

    文章目录 1. 转换矩阵.平移矩阵.旋转矩阵之间的关系 2. 缩放变换.平移变换和旋转变换 2. python实现旋转矩阵.四元数.欧拉角互相转化 由于在平时总是或多或少的遇到平移旋转的问题,每次都是 ...

  4. 罗德里格斯公式推导(轴角与旋转矩阵的关系)以及四元数与旋转向量、旋转矩阵、欧拉角之间的转换关系

    罗德里格斯公式推导(轴角与旋转矩阵的关系) 意义:罗德里格斯公式表示旋转向量到旋转矩阵之间爱你的转换关系 旋转向量:一个向量,方向与旋转轴一致,长度等于旋转角度 空间中任意旋转都可以用一个旋转轴和一个 ...

  5. 旋转矩阵与欧拉角之间的转换

    简 介: 对于欧拉角与旋转矩阵之间的转换公式和程序实现进行了测试.也显示了这其中的转换关系的复杂性,来自于欧拉角的方向.范围.转换顺序.这在实际应用中需要特别的关注. 关键词: 欧拉角,旋转矩阵 #m ...

  6. 四元素定义、运算、插值、与欧拉角之间的转换

    在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点.本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系: 定义..分别为绕Z轴.Y轴.X轴的 ...

  7. 旋转矩阵、旋转向量(轴角)、四元数、欧拉角之间相互转换的代码实现(利用Eigen实现)...

    1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 5 #include <Eigen/C ...

  8. 四元数和欧拉角的yaw转换

    float yaw ;yaw += M_PI/2;yaw = std::atan2(std::sin(yaw), std::cos(yaw));geometry_msgs::Quaternion q ...

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

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

  10. 【自动驾驶】欧拉角和旋转矩阵之间的转换

    欧拉角和旋转矩阵之间的转换 在使用Eigen时,经常会遇到旋转矩阵,旋转向量,四元数,欧拉角之间的两两相互转换.这里最常见.最容易出错的是欧拉角和旋转矩阵之间的相互转换.下面就欧拉角和旋转矩阵之间的转 ...

最新文章

  1. The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the argument
  2. 【错误记录】Groovy 注入方法报错 ( Cannot add new method [hello] for arguments [[]]. It already exists )
  3. 如何使用图形界面Webmin管理linux服务器
  4. optee的error codes
  5. IDA分析shellcode导入windows结构体
  6. shellcraft新姿势
  7. android aar jar制作,AndroidStudio aar、jar生成及其引用
  8. 【IOS下载】Cisco IOS下载
  9. java低配电脑运行,学会这几招,低配电脑用着也不卡啦!真心的实用 ,真是好方法。...
  10. linux下keepalived+nginx的负载均衡搭建
  11. 阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
  12. 机器学习笔记(七):线性回归 | 凌云时刻
  13. 太卷了,这篇 CPU Cache,估计没人看
  14. Flash桌球游戏开发
  15. 贝叶斯分析好坏_交易必读|浅谈贝叶斯分析
  16. js上传插件uploadify自动检测不到flash控件的问题
  17. window.onload=function()是什么意思
  18. php 百度网盘上传文件大小限制吗,百度云存储,curl_百度云存储如何上传数G超大文件(视频类)和防盗链等一系列问题,百度云存储,curl - phpStudy...
  19. 清北学堂2019.8.8
  20. java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解

热门文章

  1. 学习笔记(02):10小时掌握区块链开发教程-2小时构建以太坊智能合约-1
  2. Halcon颜色分类-MLP
  3. 转:C#数字、16进制字符串和字节之间互转 bin2hex
  4. RateLimiter限流
  5. Spring入门到精通:第二章 IOC容器(XML方式):7.IOC容器Bean管理XML方式-bean作用域
  6. python cmp_to_key
  7. Bootstrap导航--三级菜单
  8. 搜集一些常见国家语言Unicode编码范围
  9. 小车|PID算法 闭环控制 带有 霍尔编码器 的电机
  10. ApplePay开发