U2L5-4——四元数计算

四元数相乘

角度的叠加

两个四元数相乘得到一个新的四元数,代表两个旋转量的叠加,相当于旋转

注意:旋转相对的坐标系 是物体自身坐标系

1
2
Quaternion q = Quaternion.AngleAxis(20, Vector3.up);
this.transform.rotation *= q; //相当于以自身坐标系绕y轴旋转20度

以后的旋转都由四元数相乘来完成!!!不再使用欧拉角!!!

四元数乘向量

向量的旋转

v2=q1v1v2 = q1 * v1
四元数乘向量返回一个新向量,可以将指定向量旋转对应四元数的旋转量,相当于旋转向量

注意!“ * ”的左边一定是四元数,右边一定是向量,顺序不能颠倒也不能用“*=”

1
2
3
4
5
6
7
8
9
Vector3 v = Vector3.forward;
print(v);
//v *= Quaternion.AngleAxis(45, Vector3.up);
//v = v * Quaternion.AngleAxis(45, Vector3.up);
//注意!!!以上两种写法都是错误的!只能写成v2 = q * v1的形式!
v = Quaternion.AngleAxis(45, Vector3.up) * v; //绕Y轴顺时针旋转45度
print(v);
v = Quaternion.AngleAxis(45, Vector3.up) * v; //绕Y轴顺时针旋转45度
print(v);