U2L5-2——四元数的概念
U2L5-2——四元数的概念
四元数是简单的超复数,由实数加上三个虚数单位组成,主要用于在三维空间中表示旋转
四元数原理包含大量数学相关知识,较为复杂
比如:复数、四维空间等等
因此此处我们只对其基本构成和基本公式进行讲解
必备知识点:四元数相乘代表旋转四元数
本章代码关键字
1 | new Quaternion(,,,) //按照四元数Q = [cos(β/2), sin(β/2)x, sin(β/2)y, sin(β/2)z]格式填入,构造绕n轴(三维向量)旋转β度的四元数 |
四元数的构成
一个四元数包含一个标量和一个3D向量
, 为标量,为3D向量:
对于给定的任意一个四元数: 表示3D空间中的一个旋转量
注意:我们一般不会直接通过四元数的 w,x,y,z进行修改(你很难通过w,x,y,z反推这个四元数是什么)
简单来说,四元数的构成就是是:
假设绕 轴(三维向量)旋转 度,旋转方向遵循左手螺旋
四元数
四元数
轴-角对
在3D空间中,任意旋转都可以表示为:
绕着某个轴旋转一个旋转角得到
注意:该轴并不是空间中的x,y,z轴 而是任意一个轴
Unity里的四元数
Quaternion
是Unity中表示四元数的结构体,有两种初始化方法:
按照定义初始化
四元数
1 | Quaternino q = new Quaternion(sin(β/2)x, sin(β/2)y, sin(β/2)z, cos(β/2)) |
以上的方法并不常用!(计算太复杂)最好使用下面的方法!
轴角对构造初始化
四元数Q = Quaternion.AngleAxis
(旋转角度, 绕的是哪个轴)
1 | Quaternion q2 = Quaternion.AngleAxis(60, Vector3.right); //第一个参数旋转度数,第二个参数旋转的轴 |
四元数和欧拉角相互转换
欧拉角转四元数
1 | Quaternion q3 = Quaternion.Euler(60, 0, 0); |
四元数转欧拉角
1 | Quaternion q3 = Quaternion.Euler(60, 0, 0); |
四元数相乘代表旋转四元数
四元数相乘就是按照轴角对进行旋转,旋转方向遵循左手螺旋
1 | void Update() |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!