/// <summary> /// Obtains the angle between two vectors. /// </summary> /// <param name="u">Vector2.</param> /// <param name="v">Vector2.</param> /// <returns>Angle in radians.</returns> public static double AngleBetween(Vector2 u, Vector2 v) { double cos = DotProduct(u, v) / (u.Modulus() * v.Modulus()); if (cos >= 1.0) { return(0.0); } if (cos <= -1.0) { return(Math.PI); } return(Math.Acos(cos)); }
/// <summary> /// Normalizes the vector. /// </summary> /// <param name="u">Vector to normalize</param> /// <returns>A normalized vector.</returns> public static Vector2 Normalize(Vector2 u) { double mod = u.Modulus(); if (MathHelper.IsOne(mod)) { return(u); // the vector is already normalized } if (MathHelper.IsZero(mod)) { return(NaN); } double modInv = 1 / mod; return(new Vector2(u.x * modInv, u.y * modInv)); }
/// <summary> /// Normalizes the vector. /// </summary> /// <param name="u">Vector to normalize</param> /// <returns>A normalized vector.</returns> public static Vector2 Normalize(Vector2 u) { double mod = u.Modulus(); if (MathHelper.IsOne(mod)) return u; // the vector is already normalized if (MathHelper.IsZero(mod)) return NaN; double modInv = 1 / mod; return new Vector2(u.x * modInv, u.y * modInv); }
/// <summary> /// Obtains the angle between two vectors. /// </summary> /// <param name="u">Vector2.</param> /// <param name="v">Vector2.</param> /// <returns>Angle in radians.</returns> public static double AngleBetween(Vector2 u, Vector2 v) { double cos = DotProduct(u, v) / (u.Modulus() * v.Modulus()); if (cos >= 1.0) return 0.0; if (cos <= -1.0) return Math.PI; return Math.Acos(cos); }