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); }