#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define PI acos(-1.0)
using namespace std;
double solve(double x1,double y1,double x2,double y2,double r1,double r2)
{
double d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
if(d>r1+r2)
return 0;
if(r1>=d+r2)
return PI*r2*r2;
if(r2>=d+r1)
return PI*r1*r1;
double angle1=acos((r1*r1+d*d-r2*r2)/(2*r1*d));
double angle2=acos((r2*r2+d*d-r1*r1)/(2*r2*d));
return angle1*r1*r1+angle2*r2*r2-r1*d*sin(angle1);
}
int main()
{
double x1,y1,x2,y2,r1,r2;
while(~scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&r1,&x2,&y2,&r2))
{
printf("%.3f\n",solve(x1,y1,x2,y2,r1,r2));
}
}
poj 2546 求2个圆相交的面积
最新推荐文章于 2021-01-16 16:46:08 发布