/// <summary> /// Calculate the cross (vector) product of two vectors /// </summary> /// <param name="left">First operand</param> /// <param name="right">Second operand</param> /// <returns>The cross product of the two inputs</returns> public static Vector3Float Cross(this Vector3Float left, Vector3Float right) { Vector3Float result; left.Cross(ref right, out result); return(result); }
/// <summary> /// Transforms a vector by a quaternion rotation. /// </summary> /// <param name="vec">The vector to transform.</param> /// <param name="quat">The quaternion to rotate the vector by.</param> /// <param name="result">The result of the operation.</param> public static void Transform(this Vector3Float vec, ref Quaternion quat, out Vector3Float result) { #if true throw new NotImplementedException(); #else // Since vec.W == 0, we can optimize quat * vec * quat^-1 as follows: // vec + 2.0 * cross(quat.xyz, cross(quat.xyz, vec) + quat.w * vec) Vector3Float xyz = quat.Xyz, temp, temp2; Vector3Float.Cross(ref xyz, ref vec, out temp); Vector3Float.Multiply(ref vec, quat.W, out temp2); Vector3Float.Add(ref temp, ref temp2, out temp); Vector3Float.Cross(ref xyz, ref temp, out temp); Vector3Float.Multiply(ref temp, 2, out temp); Vector3Float.Add(ref vec, ref temp, out result); #endif }