main/src/georegression/metric/ClosestPoint2D_F64.java
public static Point2D_F64 closestPoint( LineSegment2D_F64 line,
											Point2D_F64 p,
											Point2D_F64 output ) {

		if( output == null )
			output = new Point2D_F64();

		double slopeX = line.b.x - line.a.x;
		double slopeY = line.b.y - line.a.y;

		double t = slopeX * ( p.x - line.a.x ) + slopeY * ( p.y - line.a.y );
		t /= slopeX*slopeX + slopeY*slopeY;

		if( t < 0 )
			t = 0;
		else if( t > 1 )
			t = 1;

		output.x = line.a.x + slopeX * t;
		output.y = line.a.y + slopeY * t;

		return output;
	}
public static Point2D_F64 closestPoint( LineSegment2D_F64 line,
											Point2D_F64 p,
											Point2D_F64 output ) {

		if( output == null )
			output = new Point2D_F64();

		double slopeX = line.b.x - line.a.x;
		double slopeY = line.b.y - line.a.y;

		double t = slopeX * ( p.x - line.a.x ) + slopeY * ( p.y - line.a.y );
		t /= slopeX*slopeX + slopeY*slopeY;

		if( t < 0 )
			t = 0;
		else if( t > 1 )
			t = 1;

		output.x = line.a.x + slopeX * t;
		output.y = line.a.y + slopeY * t;

		return output;
	}
Finds the closest point on the line segment to the provided point 'p'.

@param line Line segment
@param p Point`
@param output Optional storage for the closet point on the line to p.  If null a new instance is created.
@return Closest point on the line to the point