Exemple #1
0
        /// <summary>
        /// Obtains the angle between two vectors.
        /// </summary>
        /// <param name="u">Vector2d.</param>
        /// <param name="v">Vector2d.</param>
        /// <returns>Angle in radians.</returns>
        public static double AngleBetween(Vector2d u, Vector2d v)
        {
            double cos = DotProduct(u, v) / (u.Modulus() * v.Modulus());

            if (MathHelper.IsOne(cos))
            {
                return(0);
            }
            if (MathHelper.IsOne(-cos))
            {
                return(Math.PI);
            }
            return(Math.Acos(cos));

            //if (AreParallel(u, v))
            //{
            //    if (Math.Sign(u.X) == Math.Sign(v.X) && Math.Sign(u.Y) == Math.Sign(v.Y))
            //    {
            //        return 0;
            //    }
            //    return (double)Math.PI;
            //}
            //Vector3d normal = Vector3d.CrossProduct(new Vector3d(u.X, u.Y, 0), new Vector3d(v.X, v.Y, 0));

            //if (normal.Z < 0)
            //{
            //    return (double)(2 * Math.PI - Math.Acos(DotProduct(u, v) / (u.Modulus() * v.Modulus())));
            //}
            //return (double)(Math.Acos(DotProduct(u, v) / (u.Modulus() * v.Modulus())));
        }
Exemple #2
0
        /// <summary>
        /// Obtains the angle between two vectors.
        /// </summary>
        /// <param name="u">Vector2d.</param>
        /// <param name="v">Vector2d.</param>
        /// <returns>Angle in radians.</returns>
        public static double AngleBetween(Vector2d u, Vector2d v)
        {
            double cos = DotProduct(u, v)/(u.Modulus()*v.Modulus());
            if (MathHelper.IsOne(cos))
            {
                return 0;
            }
            if (MathHelper.IsOne(-cos))
            {
                return Math.PI;
            }
            return Math.Acos(cos);

            //if (AreParallel(u, v))
            //{
            //    if (Math.Sign(u.X) == Math.Sign(v.X) && Math.Sign(u.Y) == Math.Sign(v.Y))
            //    {
            //        return 0;
            //    }
            //    return (double)Math.PI;
            //}
            //Vector3d normal = Vector3d.CrossProduct(new Vector3d(u.X, u.Y, 0), new Vector3d(v.X, v.Y, 0));

            //if (normal.Z < 0)
            //{
            //    return (double)(2 * Math.PI - Math.Acos(DotProduct(u, v) / (u.Modulus() * v.Modulus())));
            //}
            //return (double)(Math.Acos(DotProduct(u, v) / (u.Modulus() * v.Modulus())));
        }