Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        /// <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));
        }
Esempio n. 3
0
 /// <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);
 }
Esempio n. 4
0
        /// <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);
        }