double msDistancePointToSegment(pointObj *p, pointObj *a, pointObj *b) {//计算点到线段(a,b)的距离   double l; /* length of line ab */  double r,s;  l = msDistancePointToPoint(a,b);    if(l == 0.0) /* a = b */     return( msDistancePointToPoint(a,p));  r = ((a->y - p->y)*(a->y - b->y) - (a->x - p->x)*(b->x - a->x))/(l*l);    if(r > 1) /* perpendicular projection of P is on the forward extention of AB */     return(MS_MIN(msDistancePointToPoint(p, b),msDistancePointToPoint(p, a)));   if(r < 0) /* perpendicular projection of P is on the backward extention of AB */     return(MS_MIN(msDistancePointToPoint(p, b),msDistancePointToPoint(p, a)));     s = ((a->y - p->y)*(b->x - a->x) - (a->x - p->x)*(b->y - a->y))/(l*l);    return(fabs(s*l)); }
  double msDistancePointToPoint(pointObj *a, pointObj *b) {   double d;   double dx, dy;     dx = a->x - b->x;   dy = a->y - b->y;   d = sqrt(dx*dx + dy*dy);   return(d); }  |