Exemple #1
0
        /// <summary>
        /// gets the parameter of the closest point
        /// </summary>
        /// <param name="targetPoint"></param>
        /// <returns></returns>
        public double ClosestParameter(Point targetPoint)
        {
            double        ret    = 0;
            double        dist   = Double.MaxValue;
            int           offset = 0;
            PolylinePoint pp     = StartPoint;

            while (pp.Next != null)
            {
                var    ls      = new LineSegment(pp.Point, pp.Next.Point);
                double t       = ls.ClosestParameter(targetPoint);
                Point  delta   = ls[t] - targetPoint;
                double newDist = delta * delta;
                if (newDist < dist)
                {
                    dist = newDist;
                    ret  = t + offset;
                }
                pp = pp.Next;
                offset++;
            }

            if (Closed)
            {
                var    ls      = new LineSegment(EndPoint.Point, StartPoint.Point);
                double t       = ls.ClosestParameter(targetPoint);
                Point  delta   = ls[t] - targetPoint;
                double newDist = delta * delta;
                if (newDist < dist)
                {
                    ret = t + offset;
                }
            }
            return(ret);
        }