关闭

四元数与欧拉角之间的转换

1309人阅读 评论(0) 收藏 举报
分类:
        在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
0
0
查看评论

四元数与欧拉角之间的转换

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

彻底搞懂四元数

提要旋转的表达方式有很多种,有欧拉角,旋转矩阵,轴角,四元素等等,今天要学习的就是游戏开发中最常用的四元素。从欧拉角和轴向角到四元数在讲四元素之前,我们先来看下简单的欧拉角和轴向角。欧拉角使用最简单的x,y,z值来分别表示在x,y,z轴上的旋转角度,其取值为0-360(或者0-2pi),一般使用ro...
  • qp120291570
  • qp120291570
  • 2014-09-03 16:55
  • 34667

四元数和欧拉角

四元数和欧拉角 四元数 四元数在姿态解算中用来表示旋转。四元数的乘积可表示三维空间上任意的伸缩旋转变换。 Quaternions do not suffer from gimbal lock. With a ...
  • jinzhichaoshuiping
  • jinzhichaoshuiping
  • 2015-01-10 18:29
  • 4366

四元数与欧拉角之间的转换

四元数与欧拉角之间的转换   在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点。本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系: 图1 3D Cartesian coordinate System (f...
  • ycl295644
  • ycl295644
  • 2016-03-22 16:28
  • 1805

欧拉角 图解释

定义 先引wiki上的定义 欧拉角:由三个角度组成,在特定坐标系下用于描述刚体的orientation. 简单来说,就是绕一个三维坐标系统下的三个基轴旋转三个角度,可以用来表示物体通过各种绕七绕八的转,最终转到的那种形态(orientation)。 这里的orientation我不知道该怎...
  • linuxheik
  • linuxheik
  • 2017-12-19 14:38
  • 101

unity3d中的欧拉角

1.欧拉角Vector3(x,y,z)代表的是旋转物体(标准旋转坐标轴x,y,z若旋转物体则取反),且是将物体从物体坐标系旋转到惯性坐标系,旋转顺序为 z, y, x也就是roll pitch yaw。 2.欧拉角有别名和万向锁问题,不要随便增长欧拉角的值,也不要单独改变欧拉角的一个旋转角度值,而是...
  • Blues1021
  • Blues1021
  • 2015-11-09 08:55
  • 8095

UE4 万能锁的一种解法

感谢网友,给我提到万能锁,让我恍然大悟,事欧拉角有问题,也感谢网友给我多的资料,使用四元数,四元数这个是最好的办法,我还没研究,不过接下来一定要好好研究,不过今天说一下我就按我的方法,调节一些东西,解决了针对我的问题的欧拉角问题。 一、定义一个Actor,然后Set Actor Rotation,...
  • sh15285118586
  • sh15285118586
  • 2016-07-28 20:18
  • 985

四元数与欧拉角之间的转换

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

欧拉角(Euler angles)

维基百科-欧拉角 欧拉角   欧拉角是由Lenhard Euler引入的,用于描述刚体方向的三个角,在3维欧几里得空间中描述这样一个方向,需要三个参数。它们(这种方向)可以多种形式给出, 欧拉角便是它们中的一种; 在see charts on SO(3)中,你可以找到其它...
  • bnrmaster
  • bnrmaster
  • 2015-07-29 12:45
  • 4926

四元数与欧拉角(Yaw、Pitch、Roll)的转换

在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点。本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系: 定义分别为绕Z轴、Y轴、X轴的旋转角度,如果用Tait-Bryan angle表示,分别为Yaw、Pitch、Roll。 ...
  • u012700322
  • u012700322
  • 2016-08-19 16:55
  • 5670
    个人资料
    • 访问:512373次
    • 积分:6409
    • 等级:
    • 排名:第4512名
    • 原创:160篇
    • 转载:28篇
    • 译文:0篇
    • 评论:260条
    博客专栏
    最新评论