首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

点到直线的距离算法-来源于地图server(目前所知效率最高的) 推荐*

2012-11-13 
点到直线的距离算法-来源于mapserver(目前所知效率最高的) 推荐*****double msDistancePointToSegment(poi

点到直线的距离算法-来源于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);
}

热点排行