点到线段的最大最小距离
//点到线段的最大最小距离
//注意判断垂足是否在线段上
double Distance(Point a,Point b,Point c) {
if(a.x == b.x) {
if(c.y >= min(a.y,b.y) && c.y <= max(a.y,b.y))
return fabs(a.x - c.x);
return min(Dis(a,c),Dis(b,c));
}
double k = (a.y - b.y) / (a.x - b.x);
double tempb = a.y - k * a.x;
Point p;
p.x = (c.x + k * c.y - k * tempb) / (k * k + 1);
p.y = k * p.x + tempb;
if(p.x >= min(a.x,b.x) && p.x <= max(a.x,b.x))
return Dis(p,c);
return min(Dis(a,c),Dis(b,c));
}