转自:http://www.cppblog.com/heath/archive/2009/12/13/103127.html

在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. 旋转矩阵与欧拉角之间的转换

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

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

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

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

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

  4. 四字节与浮点数之间的转换(c语言实现)

    C语言中对于float类型的数据,主要使用4字节进行存储,以下为干货.实现四字节与浮点数之间的转换. 0.头文件添加 #include <math.h> 1.浮点数转换为四字节 void ...

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

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

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

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

  7. 手眼标定(python、realsense、jaka);四元素、欧拉角、旋转矢量到旋转矩阵转换

    一.相机到机械臂末端位姿自动标定 机械臂和realsense初始化: import jkrc import math import time import pyrealsense2 as rs imp ...

  8. 四元素、欧拉角及旋转矩阵之间的转换

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zhuoyueljl/article/details/70789472 查看全文 http://www ...

  9. matlab 罗德里格 公式,旋转矩阵,四元素,欧拉角

    旋转变换 旋转变换最为直观的表示方法是"轴-角":绕着某一个过原点轴,旋转某一角度. 轴可以用一个单位长度的点[w1,w2,w3][w1,w2,w3]表示:原点到该点的射线即为此轴 ...

  10. php字符串怎么传到html_php字符串函数(四):html与字符串之间的转换

    * 1.addslashes($str):为了数据库查询语句等的需要在某些字符前加上了反斜线:单引号,双引号,反斜线,建议使用DBMS自带的:mysqli_real_escape_string() * ...

最新文章

  1. Spring复习笔记:3
  2. 移动互联网的机会-从零创业,半年净赚50万?
  3. java excel读取操作,Java读取Excel并操作
  4. 【Java Web】Myeclipse下运用maven管理项目jar包
  5. 从产品展示页面谈谈Hybris系列之三:Hybris Service层介绍
  6. Linux对包管理阐述
  7. 论文浅尝 - CVPR2020 | 基于网格特征的可视问答系统
  8. 【数据库系统】Web查找和数据库查询的区别
  9. 外媒:欧盟针对谷歌语音助手展开反垄断调查
  10. 灵感分享| 实例UI组件的设计风格
  11. 刚装的系统没有sql server(mssqlserver)_数据库与SQL学习
  12. 蚂蚁金服 TRaaS 技术风险防控平台解密
  13. sqoop各类命令示范
  14. 两部门:解除蒙古国部分地区口蹄疫疫情禁令
  15. MySQL变量/参数的查看与设置
  16. 1.shell脚本编程——基础篇(一)
  17. unity设置手机横屏方法和相关问题
  18. 常用adb命令学习:查看和修改设备的输入法
  19. openwrt定时任务 2021-10-08
  20. java 自动创建html网页超链接

热门文章

  1. Java中的HashCode 1 之hash算法基本原理
  2. js里用append()和appendChild有什么区别?
  3. python del 函数
  4. 【matlab】在图中插入矩形(框or阴影)
  5. 解决清除浮动的最佳办法
  6. Ubuntu12.04中安装ns-allinone-2.34
  7. Flex中如何通过设置GridLines对象的horizontalAlternateFill样式交错显示LineSeries图表背景颜色的例子...
  8. @using (Html.BeginForm())参数示例
  9. markdown编辑器------------编辑方法
  10. WinForm(C#):登录页面实现+SQL Server数据库连接方式