专栏首页吹弹牛皮之unity程序设计吹弹牛皮之Unity 引擎基础 - 四元数(一)

吹弹牛皮之Unity 引擎基础 - 四元数(一)

小菜介绍了旋转矩阵和欧拉角,我们还有第三种旋转的方式--四元数。

四元数与复数

复数对(a,b)定义了数a + bi。其中a称为实部,b称为虚部,i称为虚数,满足i² = -1。对于任意实数都能表示为复数(k, v)= k + vi。

复数能够相加、相减、相乘。

共轭复数

通过使复数的虚部变负,能够计算复数的共轭。表示如下:

复数的模

利用复数的共轭,求取复数的模。

2D平面复数的旋转表示

将x轴和y轴标记为复数的实部和虚部。那么p = x + yi表示的就是一个2D坐标系下的向量。引入另外一个复数q = cosθ + icosθ,将p、q两个复数做乘法在几何上就得到了一个新的向量(一个新的复数),乘积结果的新向量也刚好表达了p复数绕着θ角的旋转的过程。

3D空间复数的旋转表示

爱尔兰数学家威廉姆-哈密尔顿,将四元数扩展到了3D空间,它使用了三个虚部i,j,k来表示。

复数的应用还远不止这些,剩下的就留在3D空间中的四元数应用中去结合探讨。

四元数运算

四元数包含了一个标量和一个3D向量(空间轴)。经常记标量分量为w,记向量为单一的v或(x, y, z)。表示如下:

四元数可以说是有着一系列复杂的运算这些运算有

1).四元数与轴-角对

2).负四元数

3).单位四元数

4).四元数的模与规范化

5).四元数的共轭和逆

6).四元数的点乘

7).四元数的叉乘

8).四元数的“差”

9).四元数的对数、指数、标量乘运算

10).四元数的幂

0).构造四元数类

根据四元数的定义有:

使用w (x, y, z)四个分量来构造四元数数据结构,和向量、矩阵一样,四元数也有单位四元数,就是w标量 = 1,x = y = z = 0;

1).四元数与轴-角对

根据上面提及到的"2D平面复数的旋转表示",结合3D空间中复数使用3个虚部i,j,k来表示,引入另外一个复数q = cosθ + icosθ,将p、q两个复数做乘法表示旋转,有推导公式:

编码有围绕X,Y,Z坐标轴的旋转

编码绕任意轴旋转有:

特别注意的是,axis所代表的轴向量必须是单位向量。

有些需求下,我们仍需要从一个已知的四元数中递推出旋转角度和旋转轴。

2).负四元数

负四元数用于表示负方向的旋转。

3).单位四元数

向量有单位向量,矩阵有单位矩阵,同样四元数也有单位四元数。

4).四元数的模与规范化

和向量一样,四元数也有模。

利用四元数的求模公式,也可以将四元数也做规范化操作。

编码有:

四元数的模还有一个简单几何意义。

得来sin²θ+cos²θ = 1

5).四元数的共轭与逆

四元数的共轭和复数的共轭相类似,就是将连接实部和虚部的"+"变为"-"。

四元数的逆有:

当四元数的模为1时,四元数的共轭就等同于四元数的逆。

6).四元数的点乘

和向量的点乘公式一样,四元数的点乘有:

7).四元数的叉乘

四元数的标准叉乘公式有:

由于标准叉乘公式有一个顺序颠倒(从右到左)的缺陷,

于是就有了改进后的四元数叉乘公式。

改进后的叉乘公式如下:

这样得到的结果就会是一个从左到右的顺序。

编码有:

叉乘满足的性质有:

8).四元数的"差"

9).四元数的对数

10).四元数的指数

11).四元数的标量乘

12).四元数的幂

四元数的求幂公式有:

本文分享自微信公众号 - 吹弹牛皮之unity程序设计(gh_4f97f8f53f59),作者:赵晋伟

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 吹弹牛皮之Unity 引擎基础 - 四元数(二)

    上一篇的四元数内容,简单的介绍了四元数的一些基础运算,继续前篇的内容,继续扩充如下内容:

    用户7698595
  • 吹弹牛皮之Unity FSM有限状态机

    上篇短文小菜展示了行为树的内容,既然说了行为树就不得不提及一下它的好兄弟状态机,关于两者在职责上相似在实现上又不同的两个亲兄弟,网上的作者早已争论的喋喋...

    用户7698595
  • 吹弹牛皮之Unity 动态地块加载

    不求上进的小菜,写了5年多的逻辑界面功能,把人都写废了。反思顿悟后决定发奋图强,争取在接下来不要混到要饭的场景上。

    用户7698595
  • 《深入浅出SQL》问答录(二)

    看、未来
  • 小白博客 MySQL备份和还原数据库常用的命令

    备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backu...

    奶糖味的代言
  • 【React】393 深入了解React 渲染原理及性能优化

    我比较常用React, 这里就写了一篇 React 基础原理的内容, 面试基本上也就问这些, 分享给大家。

    pingan8787
  • [长文预警] 一文掌握React 渲染原理及性能优化

    我比较常用React, 这里就写了一篇 React 基础原理的内容, 面试基本上也就问这些, 分享给大家。

    coder_koala
  • [第14期] [长文预警] 深入了解React 渲染原理及性能优化

    我比较常用React, 这里就写了一篇 React 基础原理的内容, 面试基本上也就问这些, 分享给大家。

    用户6900878
  • [第14期] [长文预警] 掌握React 渲染原理及性能优化

    我比较常用React, 这里就写了一篇 React 基础原理的内容, 面试基本上也就问这些, 分享给大家。

    用户6900878
  • 记一次某城乡结合部应急支撑工作

    本文文章不涉过多及脱壳和逆向技术,仅对病毒作行为分析,相对简单易学。逆向苦手不用害怕。

    FB客服

扫码关注云+社区

领取腾讯云代金券