四元数--结合《real time rendering》中关于四元数部分
四元数产生于1843年,是复数的一个扩展,所以里面包含了一些复数的运算。直到1985年才在图形学中使用。
四元数的优势是,相对与矩阵和欧拉角,四元数更直观和方便。四元数还可以用作某些方向上的插值,而欧拉角可能并不能很好的完成。
四元数使用四个数字表示。通常,前三个和旋转的轴密切相关,最后一个和旋转的角度相关。以下是一些数学背景,对于后面的四元数的变化十分重要。
注意到四元数是复数的一个扩展,那么可以表示为:Û = (â, v), 其中 v 是一个实数,而 â 则是可以看成是虚部,且 â= i*qx + j*qy + k*qz 其中,i j k 都是虚部,他们的计算为
i2 = j2= k2 = -1 , jk = -kj=i , ik = -ki = j , ij = -ji = k ,因为â 含有三个部分,所以,一些向量的操作也是可以用在四元数的虚部上。
对于两个四元数相乘,如下图:

关于其他计算如下:

其中 conjugate 是共轭的意思。根据norm运算我们可以推出除法运算:


以及其他一些运算规则:

对于单位四元数,我们还可以用下面的方法进表示,这也是表达旋转变化比较直观的方式

其计算过程如下,其中要求uq是单位向量:

另一种表达方式如下,其可以解决log和平方运算:


对于单位四元数的直观理解如下图:

以上是四元数的基本知识背景。下面来介绍四元数表示的变化。
我们只使用四元数中的一个子集,单位四元数来进行各种旋转变化,十分简单和强大。变化方程为:

其q是一个单位四元数,其形式为公式4.36,而p则是一个四次其次的点或者向量,p的每个部分直接代替四元数的各个部分,形成一个新的四元数。注意到q是单位四元数,所以q-1 = q*。而且,单位四元数与实数相乘并不能改变四元数的作用效果,所以四元数q 和-q的作用效果一样的。那么在从矩阵转化到四元数的过程中,可能得到q也可能得到-q。公式4.40的直观理解就是上面的图。下面的公式代表两个四元数数对一个p进行变化。

四元数和矩阵的转化。因为在硬件上使用矩阵要比使用四元数计算的更快,所以可以在应用层面上使用四元数,但是在计算层面上使用矩阵。他们之间的转化为:

但是在应用层面上要使用四元数时,又要从矩阵转化成四元数。通过观察,可以看到以下等式

如果直到qw , qx , qy , qz中的任何一个,都可以计算出另外三个。通过观察可以知道如下等式:

其中tr(Mq)的意思时矩阵的迹,也就是矩阵对角线的和。在计算过程中,我们知道应该尽量避免除以一个比较小的数字。所以4.46不一定时最好的算法。通过以下比较


可知,通过比较矩阵的几个元素和u的大小就可以知道qx qy qz qw 的大小关系。如果qw 最大,那么直接使用4.46就可以。如果不是,那么可以使用如下方法,算出最大的那个元素值,然后决定使用4.44时那个元素作为分母。

四元数--结合《real time rendering》中关于四元数部分的更多相关文章
- 【Unity编程】Unity中关于四元数的API详解
本文为博主原创文章,欢迎转载,请保留出处:http://blog.csdn.net/andrewfan Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计 ...
- 四元数, Physx中的四元数
四元数的概念 & 如何使用四元数: 绕V轴旋转 f 角,对应的四元数: q = ( cos(f/2), Vx*sin(f/2), Vy*sin(f/2), Vz*sin(f/2) ) = c ...
- 视觉SLAM中的数学基础 第二篇 四元数
视觉SLAM中的数学基础 第二篇 四元数 什么是四元数 相比欧拉角,四元数(Quaternion)则是一种紧凑.易于迭代.又不会出现奇异值的表示方法.它在程序中广为使用,例如ROS和几个著名的SLAM ...
- 3D游戏与计算机图形学中的数学方法-四元数
说实话关于四元数这一节真的是不好懂,因为里面涉及到好多数学知识,单说推出来的公式就有很多.不怕大家笑话,对于四元数的学习我足足花了两天的时间,包括整理出这篇文章.在前面一章我写到了“变换”,这也是总结 ...
- Unity四元数小问题整理
1.Unity中,四元数不能保存超过360度的旋转,所以如此大范围的旋转不能直接两个四元数做插值(当你用0度和721度的四元数做插值,它只会转1度,而不会转两圈). 2.要把旋转设置成某个方向,用Lo ...
- 关于Unity四元数相乘先后顺序的问题
在unity中四元数和向量相乘在unity中可以变换旋转.四元数和四元数相乘类似矩阵与矩阵相乘的效果. 矩阵相乘的顺序不可互换,只有特殊条件矩阵才可互换.四元数相乘类似,今天就因为这个问题掉进坑里了, ...
- 3D数学基础:四元数与欧拉角之间的转换
在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点.本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系: 单位四元数可视化为三维矢量加上第四 ...
- [百度空间] [转] 四元数(Quaternions)
转:四元数(Quaternions) 好吧,我必须承认到目前为止我还没有完全理解四元数,我一度把四元数理解为轴.角表示的4维向量,也就在下午我才从和同事的争辩中理解了四元数不完全是角.轴这么简单,为此 ...
- Direct3D-3 四元数
其实本来这篇文章是打算接上篇的各种变化矩阵的推导了,想了想,还是先讲四元数吧.本人的文章并不会提到欧拉角,因为我自己没弄懂欧拉角的万向锁问题. 很多人学习数学时,会有这样一个疑惑,这东 ...
随机推荐
- 如何在idea中使用Mybatis-generator插件快速生成代码
传送门 使用这个插件可以快速生成一些代码,包含 实体类/Mapper接口/*Mapper.xml文件 首先,我们需要搭建一个Maven的项目. 在pom.xml中添加代码 <plugins> ...
- Tcl 和 Raft 发明人的软件设计哲学
John Ousterhout(斯坦福大学教授,Tcl 语言.Raft 协议的发明人...真的是超级牛人,Title 好多好多,这里就列几个大家熟悉的),在 Google 做了一次演讲,题目就叫 「A ...
- baby用品
新生嬰兒用品清單 1.哺育用品: 大奶瓶:6支,240ml左右.選擇PC材質耐高溫120度,可消毒:玻璃材質建議選用印刷安全無鉛材料,可消毒. 小奶瓶:2-3支,120ml左右.寬口徑/一般口徑(喝水 ...
- CentOS 6.0 VNC远程桌面配置方法(转帖)
问题:新装开发机,安装VNC软件后,按照下面文档配置后,无法用VNC view连接,关闭防火墙后可以连上 解决方法:说明问题出在防火墙配置上,除了允许15900端口外,还有其他要设,经过排查后,加上如 ...
- java 题
[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1 ...
- mysql索引优化续
(1)索引类型: Btree索引:抽象的可以理解为“排好序的”快速查找结构myisam,innodb中默认使用Btree索引 hash索引:hash索引计算速度非常的快,但数据是随机放置的,无法对范围 ...
- emacs之配置speedbar
安装sr-speedbar,这样的话,speedbar就内嵌到emacs里面了 emacsConfig/speedbar-setting.el (require 'sr-speedbar) (setq ...
- jsp中遇到Integer的方法valueOf()和parseInt()的区别.前者要求是对象类型,后者是数字型字符串
他们有本质区别,Integer.valueof(String s)是将一个包装类是将一个实际值为数字的变量先转成string型再将它转成Integer型的包装类对象(相当于转成了int的对象)这样转完 ...
- 搜索引擎Lucene之皮毛
一.Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索 ...
- 本地通过源码方式启动solr
首先,下载solr5.5.0源码,http://apache.fayea.com/lucene/solr/5.5.0/solr-5.5.0-src.tgz 解压完成后,分为几个目录,然而sol ...