这篇文章只是我学完四元数之后的一些理解,其实是对别人理解的理解,有些地方我理解但是没有写下来,如果真的想深入的学习四元数,建议从学习复数开始。

这个知识点需要几何想象的天赋和学习的耐心,缺一不可,慢慢啃不要急躁。

推荐几个学习的视频

  1. b站的四元数讲解 四元数的可视化
  2. 接上第二集四元数的可视化2
  3. 四元数的演示上面视频里的四元数交互图

第一个视频讲原理多一些,第二个视频会说一些旋转的具体计算,但你不看第一个肯定看不懂第二个【笑

在下面会简单的介绍一些原理和解析方面的东西,但是很多等式没有列出,需要再查找别的资料来学习。



这是一个四元数在三维上的投影,他的方程如下

(其实原方程应该表示为p=w+xi+yj+zk 四维坐标就是(w, x, y, z)



我们可以看到x轴为1,在图上也有显示

在这个方程中我们需要知道的是:

  1. x²+y²+z²=1
  2. p是想要旋转的点,q是旋转的轴
  3. ijk前面的数字表示的是xyz轴
  4. 加号前面实部和后面的虚部分别用余弦和正弦来表示
  5. 旋转的角度在这里代入时使用的是半角,为什么是半角在后面解释
  6. ij=-ji=k, jk=-kj=i, ki=-ik=j ,这个也需要解释一下

在解释第四个问题之前还需要了解一个知识叫做:左乘右手定则,右乘左手定则。

根据图一我们可以知道ijk轴互相垂直,如果是ij=k,我们想让j轴上的点旋转90度,可以理解为i推动j变成了k,左乘用右手定则,让大拇指指向i的正轴,握住i轴按照剩下四指方向旋转90度,是不是将j轴上的点旋转到了k轴上了。

这个是右手定则,左手定则是右乘的时候使用的。

还是按照上面例子里的式子,i
j=k,还是旋转90度,j右乘i得到k,使用左手,大拇指朝向j轴正方向,旋转90度,将i轴上的点旋转到了k轴上了。

按照左右手定则再结合球极投影,可以很快的记住是怎么旋转的。



四元数的有个定理,如上,所以我们知道可以如何旋转一个三维空间上的点,要解释为什么在旋转时使用半角,还需要解释为什么使用要qpq-1中为什么乘了一个四元数的共轭。

将其先进行P变化使其映射到新空间的另一个点

而这个点同一个线性变换时的矩阵是A然后再通过P逆使其映射回之前的空间

在这篇文章中解释了为什么要变换

简单的说qp相乘之后p被拉到了四维空间中,为了让它能在三维空间中表示,乘以q逆将它拉回到三维空间中来,不知道这么解释对不对,我是这么理解的。qp之后p中的实部被转移到了虚部,为了让它回到实部,在乘以q逆可以将虚部转移到实部。

而半角就是因为旋转了两次,q
p旋转了一次这是按照正轴旋转的,用右手定则来旋转,第二次旋转是(q*p)*q-1,是按照负轴来旋转的,用左手定则,由于是四元数的逆,所以虽然是用左手定则来旋转,但是和之前旋转的方向是一样的。

所以这里使用半角的原因就是前后一共旋转了两次。

右乘四元数的逆是为了降维。

半角是为了解决共轭方向第二次旋转的问题。

看到这其实大部分代码就已经能看懂了,下一篇写cocos2dx的代码注释。

cocos2dx Quaternion 四元数(1/2)的更多相关文章

  1. [Unity Quaternion]四元数Quaternion的计算方式

    什么是Quaternion四元数 1843年,William Rowan Hamilton发明了四元数,但直到1985年才有一个叫Ken Shoemake的人将四元数引入计算机图形学处理领域.四元数在 ...

  2. Quaternion 四元数

    Quaternions are used to represent rotations. 四元数用于表示旋转. They are compact, don't suffer from gimbal l ...

  3. Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()

    四元数百度百科: 传送门 四元数官方文档: 传送门 欧拉旋转.四元数.矩阵旋转之间的差异: 传送门 四元数转换为欧拉角eulerAngles 官方文档: 传送门 欧拉角转换为四元数Euler 官方文档 ...

  4. 学习和研究下unity3d的四元数 Quaternion

    学习和研究下unity3d的四元数 Quaternion 今天准备学习和研究下unity3d的四元数 Quaternion 四元数在电脑图形学中用于表示物体的旋转,在unity中由x,y,z,w 表示 ...

  5. unity3d的四元数 Quaternion

    原地址:http://www.cnblogs.com/88999660/archive/2013/04/02/2995074.html 今天准备学习和研究下unity3d的四元数 Quaternion ...

  6. 关于Rotation和Quaternion的一些问题

    当我们使用unity的时候,面对一个物体,一个不可避免的问题就是:控制物体的旋转. unity的Transform组件的第二个属性Rotation为我们提供控制物体旋转的功能.在一个物体的Inspec ...

  7. three.js 欧拉角和四元数

    这篇郭先生就来说说欧拉角和四元数,欧拉角和四元数的优缺点是老生常谈的话题了,使用条件我就不多说了,我只说一下使用方法. 1. 欧拉角(Euler) 欧拉角描述一个旋转变换,通过指定轴顺序和其各个轴向上 ...

  8. 【腾讯Bugly干货分享】WebVR如此近-three.js的WebVR示例解析

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ff1689a6c9121b1adb16 作者:苏晏烨 关于WebVR 最 ...

  9. Unity3D 脚本手册

    1.private Ray ray;  --定义射线 ray = Camera.main.ScreenPointToRay(Input.mousePosition);  --摄像机发出的射线投射鼠标到 ...

随机推荐

  1. Windows命令行创建计划任务

    Windows上创建计划任务,尽管可以通过控制面板中的"计划任务"来创建,但是,有可能会报错: 这时,可以在cmd中使用命令行工具schtasks来创建.比如想要创建一个名为&qu ...

  2. HZOJ 模板(ac)

    调了一天,恶心死我了……作者的题解水的一b…… 测试点1-6: 暴力修改查询即可,期望得分30. 测试点7-14: k=1e5,相当于没有限制,那么对于树上每个点建权值线段树,线段树合并即可. 期望的 ...

  3. top 9 Cloud Computing Failures

    top 9 Cloud Computing Failures Outages, hacks, bad weather, human error and other factors have led t ...

  4. HTML打印print

    上代码: //打印 function printme() { global_Html = document.body.innerHTML; //document.body.innerHTML = do ...

  5. day3_python之函数基础知识

    一 .为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维 ...

  6. STS Eclipse IDEA 指定启动JDK版本

    使用场景: 开发人员在自己的机器上可能装了多个版本的JDK,但是在环境变量中只能配置一个 JAVA_HOME ,so你的IDEA Eclipse 可能因为你在 JAVA_HOME 配置JDK1.8 以 ...

  7. rcGIS API for JavaScript之基础篇(一)

    ArcGIS API for JavaScript之基础篇(一)上一篇文章介绍了ArcGIS 10.4的安装指南也包含了所需要资源,需要的同学可以去公众号中查找.最近几天学习了2D地图.3D地图以及图 ...

  8. 解析xml的方式

    1.DOM 理论:将标记文档语言一次性加载进内存,在内存中形成DOM树. 优点:操作方便,可以对文档进行CRUD(增删改查)操作,适用于服务端操作 缺点:占内存,不适用与手机,智能家居等内存容量小的设 ...

  9. Windows 10 Shared folder - 5168: Spn check for SMB/SMB2 fails.

    在搭建 Win10 Shared Folder 时,运行一段时间后就报 Access denied. 导致 Shared Folder 访问不了. 查了下 Event Viewer -> Win ...

  10. Python--day69--ORM外键的正向查询和反向查询

    什么是正向查询,什么是方向查询?