链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5858
题意:知道正方形边长,求阴影部分面积
题解:直接求出两圆相交部分面积。
CODE:
#include <bits/stdc++.h>
using namespace std;
#define PI acos(-1)
#define eps 1e-5
double Area_of_overlap(double d,double r1,double r2)
{
if(r1 + r2 < d + eps)return 0;
if(d < fabs(r1 - r2) + eps)
{
double r = min(r1,r2);
return PI*r*r;
}
double x = (d*d + r1*r1 - r2*r2)/(2*d);
double t1 = acos(x / r1);
double t2 = acos((d - x)/r2);
return r1*r1*t1 + r2*r2*t2 - d*r1*sin(t1);
}
int main()
{
int t;
double l;
double d;
double r1,r2;
double ans;
double s;
scanf("%d",&t);
while(t--)
{
scanf("%lf",&l);
d=sqrt(2.0)/2.0*l;
r1=l;
r2=l/2.0;
s=PI*r2*r2;
ans=Area_of_overlap(d,r1,r2);
ans=2*(s-ans);
printf("%.2lf\n",ans);
}
return 0;
}