现在的位置: 首页 > 综合 > 正文

点到线段之间的距离

2013年12月05日 ⁄ 综合 ⁄ 共 520字 ⁄ 字号 评论关闭
double dis(node a,node b)
{
       return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
}
double solve(node pa,node pb,node pc)
{
   double sum;
   double b,c,d;
   d=dis(pa,pc);
   b=dis(pb,pc);
   c=dis(pa,pb);
   if(d<exp) sum=0;
   else if(b<exp) sum=0;         
   else if(c<exp) sum=d;
   else
   {
      if(d*d>=b*b+c*c) sum=b;
      else if(b*b>=d*d+c*c) sum=d;
      else
      {
          float l=(d+b+c)/2;
          float s=sqrt(l*(l-d)*(l-b)*(l-c));
          sum=2*s/c;
      }
   }
   return sum; 
}

点到直线的距离

double dis(node pa,node pb,node pc)
{
    if(fabs(pa.x-pb.x)<exp) return fabs(pc.x-pa.x);
    double k=(pa.y-pb.y)/(pa.x-pb.x);
    double b=pa.y-k*pa.x;
    return fabs(k*pc.x-pc.y+b)/sqrt(k*k+1);
}

抱歉!评论已关闭.