/// <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); }