u3d学习笔记四:Quaternion(四元数)类的备忘

概念

四元数是简单的超复数。 复数是由实数加上虚数单位 i 组成,其中i^2 = -1。 相似地,四元数都是由实数加上三个虚数单位 i、j、k 组成,而且它们有如下的关系: i^2 = j^2 = k^2 = -1, i^0 = j^0 = k^0 = 1 , 每个四元数都是 1、i、j 和 k 的线性组合,即是四元数一般可表示为a + bk+ cj + di,其中a、b、c 、d是实数。

对于i、j、k本身的几何意义可以理解为一种旋转,其中i旋转代表X轴与Y轴相交平面中X轴正向向Y轴正向的旋转,j旋转代表Z轴与X轴相交平面中Z轴正向向X轴正向的旋转,k旋转代表Y轴与Z轴相交平面中Y轴正向向Z轴正向的旋转,-i、-j、-k分别代表i、j、k旋转的反向旋转。百度百科

作用

Quaternion在Unity中用来表示所有的旋转,他们是紧凑的,并且不会出现欧拉角的万向锁问题。然而,Quaternion是基于复数的并不容易被直观地理解,因此你没有必要访问或修改单个Quaternion组件(x,y,z,w);通常你只需把现有的旋转(例如,来自Transform)并使用它们来构造新的旋转(例如,在两个旋转间平滑地插值)。

Quaternion函数的简单说明

  1. static function Angle (a : Quaternion, b : Quaternion) : float
    返回a和b两者之间的角度
  2. static function AngleAxis (angle : float, axis : Vector3) : Quaternion
    绕axis轴旋转angle,创建一个旋转,代码示例如下:
    transform.rotation = Quaternion.AngleAxis(30, Vector3.up); 其中
    Vector3.forward = Z轴
    Vector3.up = Y轴
    Vector3.right = X轴
  3. static function Dot (a : Quaternion, b : Quaternion) : float
    两个旋转之间的点乘,乘积的绝对值越大,则a和b代表的角位移越“相似”。
  4. static function Euler (x : float, y : float, z : float) : Quaternion
    返回一个旋转角度,绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度(像这样的顺序)。
  5. var eulerAngles : Vector3
    返回表示旋转的欧拉角度,eulerAngles表示的角度,绕z轴旋转euler.z度,绕x轴旋转euler.x度,绕y轴旋转euler.y度(这样的顺序)。
  6. static function FromToRotation (fromDirection : Vector3, toDirection : Vector3) : Quaternion
    从fromDirection到toDirection创建一个旋转。通常你使用这个旋转一个变换的其中一个轴,例如,在世界空间,y轴跟随一个目标方向toDirection
  7. static var identity : Quaternion
    返回恒等式旋转(只读)。让物体完全对齐于世界坐标或父轴,也就是相对没有旋转、
  8. static function Inverse (rotation : Quaternion) : Quaternion
    返回rotation的反向旋转
  9. static function Lerp (from : Quaternion, to : Quaternion, t : float) : Quaternion
    通过t值from向to之间插值(就是每次增加t),并且规范化结果。效率上比Slerp更快,但是旋转较远的时候的效果没有Slerp好。
  10. function LookRotation (forward : Vector3, upwards : Vector3 = Vector3.up) : void
    创建一个旋转,沿着forward(z轴)并且头部沿着upwards(y轴)的约束注视。也就是建立一个旋转,使z轴朝向view ,y轴朝向up。当forward的方向是0,记录一个错误
  11. static operator * (lhs : Quaternion, rhs : Quaternion) : Quaternion
    乘法重载预算符,意义是两个旋转的组合,就是先旋转lhs,然后在旋转rhs。但是要注意的是,旋转是不可交换的,lhs*rhs不等于rhs*lhs。
  12. static function RotateTowards (from : Quaternion, to : Quaternion, maxDegreesDelta : float) : Quaternion
    从from到to旋转一个角度,基本上和Quaternion.Slerp,但是这个函数的旋转的角速度永远不会超过maxDegreesDelta。当masDegreeDelta为负数时,旋转将相反。
  13. function SetFromToRotation (fromDirection : Vector3, toDirection : Vector3) : void
    创建一个从fromDirection到toDirection的旋转
  14. function SetLookRotation (view : Vector3, up : Vector3 = Vector3.up) : void
    创建一个旋转,沿着forward(z轴)并且头部沿着up(y轴)的约束注视。也就是建立一个旋转,使z轴朝向view ,y轴朝向up。
  15. static function Slerp (from : Quaternion, to : Quaternion, t : float) : Quaternion
    球形插值,通过t值from向to之间插值。
  16. function ToAngleAxis (out angle : float, out axis : Vector3) : void
    转换一个旋转用“角-轴”表示。

总结

都是从API中整理总结的,以为较常用到,所以在这备忘一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值