数学题-计算相交圆的公共部分面积
参考学长的模板;
数学能力差就要看公式模板;数学知识不懂画图推一下就出来了。高三同学做这种题应该特别厉害。
const double pi=acos(-1); const double eps=0.00001; double abss(double a,double b) //两数作差绝对值 { return a-b>=0?(a-b):(b-a); } struct circle { double x,y,r; } a,b; double get_dis(double x1,double y1,double x2,double y2) // 两点距离 { return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } double get_area(circle c1,circle c2) { double dis=get_dis(c1.x,c1.y,c2.x,c2.y); if(dis>=c1.r+c2.r) //相离 为 0; return 0; double min_r=c1.r<c2.r?c1.r:c2.r; double max_r=c1.r>c2.r?c1.r:c2.r; if(min_r+dis<=max_r) //内涵 为 小圆; return pi*min_r*min_r; double x=2*acos((c1.r*c1.r+dis*dis-c2.r*c2.r)/(2*c1.r*dis)); //求圆心角 double y=2*acos((c2.r*c2.r+dis*dis-c1.r*c1.r)/(2*c2.r*dis)); //求圆心角 double area1=x*c1.r*c1.r/2-c1.r*c1.r*sin(x)/2; //扇形面积 减去 三角形面积 double area2=y*c2.r*c2.r/2-c2.r*c2.r*sin(y)/2; //扇形面积 减去 三角形面积 return area1+area2; }