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