题意简单 就是求两个圆环的相交面积
fun(a,b) 计算 圆a,b的相交面积, 如果a是环,b是圆,面积等于 两个大圆的面积交 减去 小圆与大圆的交。
所以 圆环的交等于 大圆交 — 大圆与小圆交 - 大圆与小圆交 + 小圆与小、小圆交
//圆交模板
#define eps 0.000000001
#define pi acos(-1.0) // 圆周率不能手写(WA精度不够)
struct Point
{
double x;
double y;
Point(double a=0, double b=0) { x=a; y=b;} //constructor
};
double fun(Point c1, double r1, Point c2, double r2) {
double a1, a2, d, ret;
d = sqrt((c1.x-c2.x)*(c1.x-c2.x)+(c1.y-c2.y)*(c1.y-c2.y));
if ( d > r1 + r2 - eps ) return 0;
if ( d < r2 - r1 + eps ) return pi*r1*r1;
if ( d < r1 - r2 + eps ) return pi*r2*r2;
a1 = acos((r1*r1+d*d-r2*r2)/2/r1/d);
a2 = acos((r2*r2+d*d-r1*r1)/2/r2/d);
ret= (a1-0.5*sin(2*a1))*r1*r1 + (a2-0.5*sin(2*a2))*r2*r2;
return ret;
}