相交圆面积
求两个圆相交部分的面积
#include <cstdio>
#include <cstring>
#include <cmath>
#define pi acos(-1.0)
struct node
{
double x;
double y;
double r;
} c[2];
double area(int i, double r1, int j, double r2)
{
double d=
sqrt((c[i].x-c[j].x)*(c[i].x-c[j].x)+(c[i].y- c[j].y)*(c[i].y-c[j].y));
if(r1>r2)
{
double temp=r1;
r1=r2;
r2=temp;
}
if(r1+r2<=d)
return 0;
else if(r2-r1>=d)
return pi*r1*r1;
else
{
double a1 = acos((r1*r1+d*d-r2*r2)/2.0/r1/d);
double a2 = acos((r2*r2+d*d-r1*r1)/2.0/r2/d);
double p = (r1+r2+d)/2.0;
double s = sqrt(p*(p-r1)*(p-r2)*(p-d));
return (a1*r1*r1+a2*r2*r2-2*s);
}
}
int main()
{
while(scanf("%lf%lf%lf%lf%lf%lf",&c[0].x,&c[0].y,&c[0].r,&c[1].x,&c[1].y,&c[1].r) == 6)
printf("%.3lf\n",area(0, c[0].r, 1, c[1].r));
return 0;
}

浙公网安备 33010602011771号