定义
四元数是简单的超复数,由实数加上三个虚数单位组成,主要用于在三维空间中表示旋转。理解即可。
Unity中四元数初始化方法
1.轴角对公式初始化
四元数Q = [cos(β/2),sin(β/2)x,sin(β/2)y,sin(β/2)z]
Quaternion quaternion = new Quaternion(sin(β/2)x,sin(β/2)y,sin(β/2)z,cos(β/2));
2.轴角对方法初始化(一般都是使用这种方式)
四元数Q = Quaternion a = Quaternion.AngleAxis(角度,轴);
//这里的Vertor3.forward是当前物体的Z轴,而不是世界坐标Z轴
Quaternion a = Quaternion.AngleAxis(60, Vector3.forward);
代码示例
private void Start()
{
//创建一个Cube
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
//设置cube的四元数
cube.transform.rotation = Quaternion.AngleAxis(60, Vector3.right);
}
四元数不会有欧拉角万向节死锁问题。物体A首先沿X轴旋转90°,然后在Update里面沿Y轴不停的旋转,可以看到不会有万向节死锁了。
代码示例
public class Test : MonoBehaviour
{
public Transform A;
private void Start()
{
}
private void Update()
{
//四元数 * 四元数 表示旋转四元数
A.transform.rotation *= Quaternion.AngleAxis(1,Vector3.up);
}
}
四元数与欧拉角转换
欧拉角转四元数
//x轴旋转60°
Quaternion q = Quaternion.Euler(60,0,0);
四元数转欧拉角
//x轴旋转60°
Quaternion q = Quaternion.Euler(60, 0, 0);
//四元数转欧拉角var euler = q.eulerAngles;