internal static double DistanceToLineSegment(this Point point, IList polyline, double delta)
        {
            double num1 = double.NaN;

            for (int index = 0; index < polyline.Count - 1; ++index)
            {
                Point  point1 = (Point)polyline[index];
                Point  point2 = (Point)polyline[index + 1];
                double num2   = PointExtensions.DistanceToLine(point, point1, point2);
                bool   flag   = Math.Abs(point1.X - point2.X) < 1E-06 ? PointExtensions.IsYBetween(point, point1, point2) : PointExtensions.IsXBetween(point, point1, point2);
                if (num2 < delta && flag || RectExtensions.AroundPoint(point1, point, delta))
                {
                    num1 = num2;
                    break;
                }
            }
            return(num1);
        }
        internal static double DistanceToPolyline(this Point point, IList polyline, ref int closestSegmentToPoint)
        {
            double num1 = double.MaxValue;

            closestSegmentToPoint = 0;
            for (int index = 0; index < polyline.Count - 1; ++index)
            {
                Point  a    = (Point)polyline[index];
                Point  b    = (Point)polyline[index + 1];
                double num2 = PointExtensions.DistanceToLine(point, a, b);
                if (num2 < num1)
                {
                    num1 = num2;
                    closestSegmentToPoint = index;
                }
            }
            return(num1);
        }
        internal static double DistanceToSegmentSquared(this Point p, Point a, Point b)
        {
            if (a == b)
            {
                return(Utils.DistanceSquared(p, a));
            }
            double num1 = b.X - a.X;
            double num2 = b.Y - a.Y;

            if ((p.X - a.X) * num1 + (p.Y - a.Y) * num2 < 0.0)
            {
                return(Utils.DistanceSquared(a, p));
            }
            if ((b.X - p.X) * num1 + (b.Y - p.Y) * num2 < 0.0)
            {
                return(Utils.DistanceSquared(b, p));
            }
            else
            {
                return(PointExtensions.DistanceToLineSquared(p, a, b));
            }
        }
 internal static double DistanceToLine(this Point p, Point a, Point b)
 {
     return(PointExtensions.Distance(p, Utils.ProjectPointOnLine(p, a, b)));
 }
        internal static double DistanceToPolyline(this Point point, IList polyline)
        {
            int closestSegmentToPoint = 0;

            return(PointExtensions.DistanceToPolyline(point, polyline, ref closestSegmentToPoint));
        }
 /// <summary>
 /// Returns the distance of the point to the origin.
 ///
 /// </summary>
 /// <param name="point">The point.</param>
 /// <returns/>
 public static double Distance(this Point point)
 {
     return(PointExtensions.Distance(point, new Point(0.0, 0.0)));
 }
        /// <summary>
        /// Distances to rectangle.
        /// </summary>
        /// <param name="point">The point.</param><param name="rect">The rectangle.</param>
        public static double Distance(this Point point, Rect rect)
        {
            Point endPoint = PointExtensions.DistancePoint(point, rect);

            return(PointExtensions.Distance(point, endPoint));
        }
 /// <summary>
 /// Distance to rectangle.
 /// </summary>
 /// <param name="point">The point.</param><param name="rect">The rectangle.</param>
 public static Point DistancePoint(this Point point, Rect rect)
 {
     return(new Point(PointExtensions.DistanceSelect(point.X, rect.Left, rect.Right), PointExtensions.DistanceSelect(point.Y, rect.Top, rect.Bottom)));
 }