1、四元数相乘
两个四元数相乘得到一个新的四元数,代表两个旋转量的叠加,相当于旋转
注意:旋转相对的坐标系,是物体自身坐标系
例如绕自身y轴转20度:
Quaternion q = Quaternion.AngleAxis(20, Vector3.up);
this.transform.rotation *= q
如果绕自身y轴转40度,那么就再乘一个q:
Quaternion q = Quaternion.AngleAxis(20, Vector3.up);
this.transform.rotation *= q
this.transform.rotation *= q
2、四元数乘向量
四元数乘向量返回一个新向量,可以将指定向量旋转对应四元数的旋转量,相当于旋转向量,例如将向量(0,0,1)绕y轴旋转45度:
Vector3 v = Vector3.forward;
v = Quaternion.AngleAxis(45, Vector3.up) * v;
一定要注意,不能够改变乘法的顺序,必须是四元数乘以一个向量才能返回一个向量,即以下写法是错的:
v = v * Quaternion.AngleAxis(45, Vector3.up); // 会报错
同理,多次相乘即多次旋转,例如将向量(0,0,1)旋转90度:
Vector3 v = Vector3.forward;
v = Quaternion.AngleAxis(45, Vector3.up) * v;
v = Quaternion.AngleAxis(45, Vector3.up) * v;