编程求两个圆相交部分面积
发布网友
发布时间:2022-04-24 13:06
我来回答
共1个回答
热心网友
时间:2022-04-24 15:27
boolean
isIntersecting(Circle
c){
return
Math.sqrt((_x-c._x)*(_x-c._x)+(_y-c._y)*(_y-c._y))<=_r+c._r;
}
double
sharedArea(Circle
c){
double
alpha,area;
double
d=Math.sqrt((_x-c._x)*(_x-c._x)+(_y-c._y)*(_y-c._y));//两圆心距离
if(d>_r+c._r){
return
0;
}
alpha=Math.acos((d*d+_r*_r-c._r*c._r)/(2*d*_r));//余弦定理取得相交弧所对本圆的圆心角
area=alpha*_r*_r;//本圆扇形面积
alpha=Math.acos((d*d+c._r*c._r-_r*_r)/(2*d*c._r));//余弦定理取得相交弧所对另一圆的圆心角
area+=alpha*c._r*c._r;//另一圆的扇形面积
double
s=(d+_r+c._r)/2;//海*式之s
area-=Math.sqrt(s*(s-d)*(s-_r)*(s-c._r))*2;//两扇形面积减去两三角形面积即为交集
return
area;
}