点到直线的距离算法-来源于mapserver(目前所知效率最高的) 推荐*****
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);
}