returnret;
}
int intersect_line_circle(point c,doubler,point l1,point l2){
returndisptoline(c,l1,l2)<reps;
}
int intersect_seg_circle(point c,doubler,point l1,point l2){
doublet1=distance(c,l1)-r,t2=distance(c,l2)-r;
pointt=c;
if(t1<eps||t2<eps)
return t1>-eps||t2>-eps;
t.x=l1.y-l2.y;
t.y=l2.x-l1.x;
returnxmult(l1,c,t)*xmult(l2,c,t)<eps&&disptoline(c,l1,l2)-r<eps;
}
int intersect_circle_circle(point c1,doubler1,point c2,double r2){
returndistance(c1,c2)<r1r2eps&&distance(c1,c2)>fabs(r1-r2)-eps;
}
point dot_to_circle(point c,double r,pointp){
pointu,v;
if(distance(p,c)<eps)
return p;
u.x=c.xr*fabs(c.x-p.x)/distance(c,p);
u.y=c.yr*fabs(c.y-p.y)/distance(c,p)*((c.x-p.x)*(c.y-p.y)<0?-1:1);
v.x=c.x-r*fabs(c.x-p.x)/distance(c,p);
v.y=c.y-r*fabs(c.y-p.y)/distance(c,p)*((c.x-p.x)*(c.y-p.y)<0?-1:1);
returndistance(u,p)<distance(v,p)?u:v;
}
//计算线段与圆的交点可用这个函数后判点是否段上
void intersection_line_circle(pointc,double r,point l1,point l2,point& p1,point& p2){
pointp=c;
doublet;
p.x=l1.y-l2.y;
p.y=l2.x-l1.x;
p=intersection(p,c,l1,l2);
t=sqrt(r*r-distance(p,c)*distance(p,c))/distance(l1,l2);
p1.x=p.x(l2.x-l1.x)*t;
p1.y=p.y(l2.y-l1.y)*t;
p2.x=p.x-(l2.x-l1.x)*t;
p2.y=p.y-(l2.y-l1.y)*t;
}
void intersection_circle_circle(pointc1,double r1,point c2,double r2,point& p1,point& p2){
pointu,v;
doublet;
t=(1(r1*r1-r2*r2)/distance(c1,c2)/distance(c1,c2))/2;
u.x=c1.x(c2.x-c1.x)*t;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-34960-39.html
052D虽然不及它