public static Quaternion operator *(Quaternion q1, Quaternion q2) { var q = new Quaternion { W = q1.W * q2.W - q1.X * q2.X - q1.Y * q2.Y - q1.Z * q2.Z, X = q1.W * q2.X + q1.X * q2.W + q1.Y * q2.Z - q1.Z * q2.Y, Y = q1.W * q2.Y + q1.Y * q2.W + q1.Z * q2.X - q1.X * q2.Z, Z = q1.W * q2.Z + q1.Z * q2.W + q1.X * q2.Y - q1.Y * q2.X }; return q; }
public Vector3 Rotate(Vector3 v) { var vQuat = new Quaternion { W = 0.0, X = v.X, Y = v.Y, Z = v.Z }; var resQuat = this * (vQuat * this.Conjugate()); return new Vector3 { X = resQuat.X, Y = resQuat.Y, Z = resQuat.Z }; }