unity --22 数学基础- 四元数和欧拉角

本文介绍了Unity中欧拉角和四元数的概念及其优缺点。欧拉角占用空间小,但存在万向节死锁问题;四元数解决了这一问题,但使用较复杂。Unity提供了基于欧拉角的Rotate函数,同时利用四元数避免了欧拉角的缺点。此外,文章还列举了Quaternion结构的一些常用函数,并分享了个人在实际开发中的经验,强调通过向量理解四元数旋转的重要性。
摘要由CSDN通过智能技术生成

欧拉角

三个数字来保存方位,共用vector3,但此时它不代表向量。

优点
•仅使用三个数字表达方位,占用空间小。
•沿坐标轴旋转的单位为角度,符合人的思考方式。
•任意三个数字都是合法的,不存在不合法的欧拉角。

//欧拉角,每次叠加(1,0,0)旋转
  transform.eulerAngles+=transform.right;
         
//与前者等效,但实际涵义不同,内部使用的四元数
  transform.Rotate(transform.right);

缺点:
对于一个方位,存在多个欧拉角描述,因此无法判断多个欧 拉角代表的角位移是否相同。
例如角度250,0,0与角度290,180,180是同一个欧拉角,难以直观判断。

为了保证任意方位都只有独一无二的表示,Unity引擎限制 了角度范围,即沿X轴旋转限制在-90到90之间,沿Y与Z轴 旋转限制在0到360之间。

欧拉角会造成万向节死锁。

四元数

因为欧拉角的缺点,数学家提出了四元数。
缺点:
难于使用,不建议单独修改某个数值。
•存在不合法的四元数。

两个四元数相乘可以组合旋转效果,四元数不能使用+号,表示叠加关系是*号

//物体沿自身y轴旋转1°
  transform.rotation *= Quaternion.Euler(0,1,0);

//下面两行等价
//Quaternion.Euler(0, 30, 0) *Quaternion.Euler(0, 20, 0)
//Quaternion.Euler(0, 50, 0);

四元数左乘向量,表示将该向量按照四元数表示的角度旋转:

Vector3 point = new Vector3(0,0,10);
Vector3 newPoint= Quaternion
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值