A straight translation from python to java; taken from http://www.fundza.com/vectors/point2line/index.html
public double distance2(Point2D pnt) { double lineVecDx=to.x-from.x; double lineVecDy=to.y-from.y; double pntVecDx=pnt.getX()-from.x; double pntVecDy=pnt.getY()-from.y; double lineLen=dist(lineVecDx,lineVecDy); double pntVecLength=dist(lineVecDx,lineVecDy); double lineUnitvecDx=lineVecDx/pntVecLength; double lineUnitvecDy=lineVecDy/pntVecLength; double pntVecScaledDx=pntVecDx/lineLen; double pntVecScaledDy=pntVecDy/lineLen; double tx = lineUnitvecDx * pntVecScaledDx; double ty = lineUnitvecDy * pntVecScaledDy; double t = tx+ty; if (t<0) t=0; else if (t>1) t=1; double nearestX=lineVecDx*t; double nearestY=lineVecDy*t; return dist(nearestX-pntVecDx, nearestY-pntVecDy); } double dist(double dx, double dy) { return Math.sqrt(dx*dx+dy*dy); }