相交圆面积

求两个圆相交部分的面积

#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;
}


posted @ 2013-08-18 10:53  xlc2845  阅读(197)  评论(0)    收藏  举报