【unity】欧拉角、四元数

 欧拉角(eulerAngle)

【unity】欧拉角、四元数_第1张图片

用三个角度来保存方位

x,z沿自身坐标旋转;y沿世界坐标旋转

                                           API: Vector eulerAngle = this.transform.eulerAngles;

欧拉角 优点:

仅用三个数字表达方位,占用空间小

沿坐标轴旋转的角度为单位,符合人的思考

任意三个数字都是合规的,不存在不合规的欧拉角

欧拉角 缺点:

①对于同一个方位,存在多个欧拉角描述,无法判断多个欧拉角代表的角位移是否相同。

例如:

--角度(0,5,0)与角度(0,365,0)

--角度(0,-5,0)与角度(0,355,0)

--角度(250,0,0)与角度(290,180,180)

*为了表示任意方位都有独一无二的表示,unity限制了角度范围,X轴限制在-90到90之间,y与z轴限制在0-360之间。

②万向节死锁

物体沿x轴旋转±90°,自身坐标z轴与世界坐标y轴将重合,此时将失去一个自由度。

在万向节死锁情况下,规定沿y轴的旋转全归到z轴。

四元数(Quaternion)

API: Quaternion qt=this.transform.rotation;

!!!欧拉角→四元数

this.transform.rotation=Quaternion.Euler(x,y,z);

四元数运算:

①四元数向量相乘:

【unity】欧拉角、四元数_第2张图片

 ②四元数四元数相乘:

可以实现组合旋转 例如:

Quaternion.Euler(0,30,0)*Quaternion.Euler(0,20,0)=Quaternion.Euler(0,50,0);

四元数 优点:

①避免万向节死锁

②可使物体沿自身Y轴旋转

四元数 缺点:

①难于使用,不建议单独修改某个数值

②存在不合理的四元数

总结:

欧拉角 方便,但是表达方式不唯一,还有万向节死锁

四元数 没万向节死锁,但是难使

你可能感兴趣的:(unity,游戏引擎)