四元数是什么

1、四元数的构成

四元数是简单的超复数,由实数加上三个虚数单位组成,主要用于在三维空间中表示旋转

四元数原理包含大量数学相关知识,较为复杂,比如:复数、四维空间等等

因此此文章只对其基本构成和基本公式进行学习


一个四元数包含一个标量和一个3D向量

[w,v],w为标量,v为3D向量,展开后为——[w,(x,y,z)]

对于给定的任意一个四元数:表示3D空间中的一个旋转量

这里需要明白一个概念:

  1. 轴-角对:在3D空间中,任意旋转都可以表示,绕着某个轴旋转一个旋转角得到。注意:该轴并不是空间中的x,y,z轴,而是任意一个轴(任意一个向量)。

对于给定旋转,假设为绕着n轴,旋转\beta度,n轴为(x,y,z),那么可以构成四元数为:

四元数Q=\left[ cos(\beta/2),sin(\beta/2)n\right ],n展开后为:

四元数Q=\left[cos(\beta/2), sin(\beta/2)x,sin(\beta/2)y,sin(\beta/2)z \right ]

四元数Q则表示绕着轴n,旋转\beta度的旋转量

 2、Unity中的四元数

Quaternion:是Unity中表示四元数的结构体

轴角对公式初始化:

四元数Q=\left[cos(\beta/2), sin(\beta/2)x,sin(\beta/2)y,sin(\beta/2)z \right ]

Quaternion q = new Quaternion \left(cos(\beta/2), sin(\beta/2)x,sin(\beta/2)y,sin(\beta/2)z \right )

例如绕着x轴旋转60度

Quaternion q = new Quaternion(Mahtf.Sin(30 * Mathf.Deg2Rad) * 1, 0, 0, Mathf.Cos(30 * Mathf.Deg2Rad));

轴角对方法初始化:

四元数Q = Quaternion.AngleAxis(角度,轴)
Quaternion q = Quaternion.AngleAxis(60, Vector3.right)

3、四元数和欧拉角的转换

欧拉角转四元数:

Quaternion.Euler(x,y,z)

四元数转欧拉角:

Quaternion q;
q.eulerAngles

4、四元数弥补的欧拉角缺点

注意:四元数相乘代表旋转四元数

比如,以下表示绕自身y轴旋转1度,角度范围为[-180,180]

this.transform.rotation *= Quaternion.AngleAxis(1, Vector3.up);

(1)同一旋转的表示不唯一,因为角度范围有限

(2)不会有万向节死锁,即使在Unity中欧拉角x轴旋转90度

注意:我们一般不会直接通过四元数的w,x,y,z进行修改

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值