SuperMap.WindowsPhone.Actions.Edit.FindPointOnLineClosestToPoint C# (CSharp) Method

FindPointOnLineClosestToPoint() private static method

private static FindPointOnLineClosestToPoint ( Point2D p0, Point2D p1, Point2D p ) : Point2D
p0 SuperMap.WindowsPhone.Core.Point2D
p1 SuperMap.WindowsPhone.Core.Point2D
p SuperMap.WindowsPhone.Core.Point2D
return SuperMap.WindowsPhone.Core.Point2D
        private static Point2D FindPointOnLineClosestToPoint(Point2D p0 , Point2D p1 , Point2D p)
        {
            Point2D p0p = new Point2D(p.X - p0.X , p.Y - p0.Y);
            Point2D p1p = new Point2D(p1.X - p0.X , p1.Y - p0.Y);
            double p0p1sq = p1p.X * p1p.X + p1p.Y * p1p.Y;
            double p0p_p0p1 = p0p.X * p1p.X + p0p.Y * p1p.Y;
            double t = p0p_p0p1 / p0p1sq;
            if (t < 0.0)
            {
                t = 0.0;
            }
            else if (t > 1.0)
            {
                t = 1.0;
            }
            return new Point2D(p0.X + p1p.X * t , p0.Y + p1p.Y * t);
        }