Unity中四元数quaternion的学习笔记

探讨四元数解决矩阵变换三大难题,介绍四元数原理、运算及在游戏引擎中实现平滑旋转与插值,对比矩阵,强调四元数在效率与效果上的优势。

笔记来自《游戏引擎架构》Jason Gregory著 第二版,4.4四元数,Page144。

引入:矩阵变换的三个问题

3*3矩阵可以表示三位中的任何旋转,但是他又三个问题。

1.9个浮点型表述只有三个自由度的旋转显得多余。

2.矩阵乘法过于复杂对于计算机来说,我们需要运算更快的旋转方法。

3.不能平滑插值。

如此,我们有quaternion q = {x,y,z,w}

四元数由威廉哈密顿爵士发明,作为复数的衍生,其定义x,y,z为虚部,w为实部,即x^2 = y^2 = z^2 =-1,w^2 = 1。

我们并不需要使用虚数,四元数并不是为旋转而生,我们只需要知道,单位长度四元数可以表示旋转,

即x^2 + y^2 + z^2 + w^2 = 1。

需要注意:四元数同矩阵一样代表一种变换而不是一个具体到位置的旋转,四元数的作用对象是向量而不是一个点,你可以让一个箭头绕轴旋转90度,但是你不能让一个点旋转,因为点是没有方向的。这可能影响你理解四元素。

旋转的三维表现

矢量vector 标量scalar。

以下标粗字母为矢量

q = [qv,qs],qv矢量部分是一个Vector3,qs标量部分为float。

q = [a*sinθ/2 , cosθ/2],在三维中,a为旋转轴的单位向量,绕轴a按右手法则旋转θ,即为该q定义的旋转。

旋转的乘法

注意:两个四元数相加不表示任何旋转,因为其模长不等于1。

p和q表示两个旋转,两者合成旋转用乘法表示pq,四元数的乘法有多种,此处用拉各斯曼积Grassmann product草人积

pq = [ps

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值