unity 中的数学 之 四元数

 本文仅作学习笔记交流分享,不做任何商业用途

本文结合unity官方手册,unity唐老狮,unity麦扣的教程等知识,如有不足还请斧正

1.什么是四元数

四元数_百度百科 (baidu.com),四元数的本质是几个实数和几个虚数的结合

其创造源于对复数以及矩阵的某些问题,但是在下面方向应用比较广泛

2.什么是万向节死锁

万向节死锁说白了就是在欧拉角的三个自由量x,y,z下

一个物体在旋转中会造成其中两个轴的重叠

变成两个轴了,那就没办法同时旋转三个自由量了呗

无伤理解欧拉角中的“万向死锁”现象_哔哩哔哩_bilibili

3.unity中的四元数

Quaternion - Unity 脚本 API (unity3d.com)

3.1 欧拉角与四元数互相转换

其实该说不说,transform组件的静态方法rotation的x y z 信息就是四元数

但是唐老狮为了更方便做好前期的理解,先讲了欧拉角

//欧拉角转四元数
Vector3 euler = this.transform.eulerAngles;//这行代码获得挂在该脚本的对象的欧拉角
Quaternion quater = Quaternion.Euler(euler);
Quaternion quater1 = Quaternion.Euler(0,0,0);
//四元数转欧拉角
print( quater.eulerAngles);

3.2对比物体间的旋转角度 Quaternion.Angle

这个方法是用来比对物体之间角度偏移的,也就是当前物体与目标物体之间的角度

你可以在update函数里这么写:

注意声明一个公共transform对象

public Transform target;
 float angle = Quaternion.Angle(transform.rotation, target.rotation);
 Debug.Log("角度" + angle);

我把脚本挂在了右边这个球上面 ,将左边这个图形挂在到了脚本上的target上面 ,运行试试旋转左边的图形,观察输出窗口

3.3 直接绕轴旋转角度 Quaternion.AngleAxis

4.其他静态方法请参考官方手册

5.四元数的计算

下面着重介绍在unity中四元数的计算都代表了什么实际意义

1.乘法

1.1 旋转=四元数*四元数

使挂载该脚本的的对象,按y轴顺时针旋转90°

1.2旋转向量=四元数*向量

注意是四元数*向量,而不是向量*四元数,因为矩阵乘法是分左乘和右乘的

将一个(0,0,1)的向量按y轴顺时针旋转90°,自然指向x轴,所以结果是(1,0,0)

猜你喜欢

转载自blog.csdn.net/2301_77947509/article/details/143256769