public static Quaternion operator *(Quaternion q1, Quaternion q2) { if (q1 == null) { return(null); } if (q2 == null) { return(null); } Vector3b v1 = new Vector3b(q1.x, q1.y, q1.z); Vector3b v2 = new Vector3b(q2.x, q2.y, q2.z); double angle = ((q1.w * q2.w) - Vector3b.Dot(v1, v2)); Vector3b cross = Vector3b.Cross(v1, v2); v1 *= q2.w; v2 *= q1.w; Quaternion result = new Quaternion(angle, (v1.x + v2.x + cross.x), (v1.y + v2.y + cross.y), (v1.z + v2.z + cross.z) ); return(result); }
public static Quaternion operator *(Quaternion q1, Quaternion q2) { if(q1 == null) return null; if(q2 == null) return null; Vector3b v1 = new Vector3b(q1.x, q1.y, q1.z); Vector3b v2 = new Vector3b(q2.x, q2.y, q2.z); double angle = ((q1.w * q2.w) - Vector3b.Dot(v1, v2)); Vector3b cross = Vector3b.Cross(v1, v2); v1 *= q2.w; v2 *= q1.w; Quaternion result = new Quaternion(angle, (v1.x + v2.x + cross.x), (v1.y + v2.y + cross.y), (v1.z + v2.z + cross.z) ); return result; }