コード例 #1
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
 public bool Equals(Vector2d obj)
 {
     return obj.x == this.x && obj.y == this.y;
 }
コード例 #2
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
 /// <summary>
 /// Obtains the square distance between two points.
 /// </summary>
 /// <param name="u">Vector2d.</param>
 /// <param name="v">Vector2d.</param>
 /// <returns>Square distance.</returns>
 public static double SquareDistance(Vector2d u, Vector2d v)
 {
     return (u.X - v.X)*(u.X - v.X) + (u.Y - v.Y)*(u.Y - v.Y);
 }
コード例 #3
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
        /// </summary>
        /// Check if the components of two vectors are approximate equals.
        /// <param name="obj">Vector2d.</param>
        /// <param name="threshold">Maximun tolerance.</param>
        /// <returns>True if the three components are almost equal or false in anyother case.</returns>
        public bool Equals(Vector2d obj, double threshold)
        {
            if (Math.Abs(obj.X - this.x) > threshold)
            {
                return false;
            }
            if (Math.Abs(obj.Y - this.y) > threshold)
            {
                return false;
            }

            return true;
        }
コード例 #4
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
 /// <summary>
 /// Obtains the counter clockwise perpendicular vector .
 /// </summary>
 /// <param name="u">Vector2d.</param>
 /// <returns>Vector2d.</returns>
 public static Vector2d Perpendicular(Vector2d u)
 {
     return new Vector2d(-u.Y, u.X);
 }
コード例 #5
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
 /// <summary>
 /// Rounds the components of a vector.
 /// </summary>
 /// <param name="u">Vector2d.</param>
 /// <param name="numDigits">Number of significative defcimal digits.</param>
 /// <returns>Vector2d.</returns>
 public static Vector2d Round(Vector2d u, int numDigits)
 {
     return new Vector2d(Math.Round(u.X, numDigits), Math.Round(u.Y, numDigits));
 }
コード例 #6
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
 /// <summary>
 /// Obtains the dot product of two vectors.
 /// </summary>
 /// <param name="u">Vector2d.</param>
 /// <param name="v">Vector2d.</param>
 /// <returns>The dot product.</returns>
 public static double DotProduct(Vector2d u, Vector2d v)
 {
     return (u.X*v.X) + (u.Y*v.Y);
 }
コード例 #7
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
 /// <summary>
 /// Obtains the midpoint.
 /// </summary>
 /// <param name="u">Vector2d.</param>
 /// <param name="v">Vector2d.</param>
 /// <returns>Vector2d.</returns>
 public static Vector2d MidPoint(Vector2d u, Vector2d v)
 {
     return new Vector2d((v.X + u.X)*0.5F, (v.Y + u.Y)*0.5F);
 }
コード例 #8
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
 /// <summary>
 /// Obtains the distance between two points.
 /// </summary>
 /// <param name="u">Vector2d.</param>
 /// <param name="v">Vector2d.</param>
 /// <returns>Distancie.</returns>
 public static double Distance(Vector2d u, Vector2d v)
 {
     return (Math.Sqrt((u.X - v.X)*(u.X - v.X) + (u.Y - v.Y)*(u.Y - v.Y)));
 }
コード例 #9
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
 /// <summary>
 /// Obtains the cross product of two vectors.
 /// </summary>
 /// <param name="u">Vector2d.</param>
 /// <param name="v">Vector2d.</param>
 /// <returns>Vector2d.</returns>
 public static double CrossProduct(Vector2d u, Vector2d v)
 {
     return (u.X*v.Y) - (u.Y*v.X);
 }
コード例 #10
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
 /// <summary>
 /// Checks if two vectors are perpendicular.
 /// </summary>
 /// <param name="u">Vector2d.</param>
 /// <param name="v">Vector2d.</param>
 /// <param name="threshold">Tolerance used.</param>
 /// <returns>True if are penpendicular or false in anyother case.</returns>
 public static bool ArePerpendicular(Vector2d u, Vector2d v, double threshold)
 {
     return MathHelper.IsZero(DotProduct(u, v), threshold);
 }
コード例 #11
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
 /// <summary>
 /// Checks if two vectors are parallel.
 /// </summary>
 /// <param name="u">Vector2d.</param>
 /// <param name="v">Vector2d.</param>
 /// <param name="threshold">Tolerance used.</param>
 /// <returns>True if are parallel or false in anyother case.</returns>
 public static bool AreParallel(Vector2d u, Vector2d v, double threshold)
 {
     double a = u.X*v.Y - u.Y*v.X;
     return MathHelper.IsZero(a, threshold);
 }
コード例 #12
0
ファイル: Vector2d.cs プロジェクト: steve-stanton/backsight
        /// <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())));
        }