相交圆面积

来源:互联网 发布:骨灰盒尺寸数据 编辑:程序博客网 时间:2024/04/28 17:56

求两个圆相交部分的面积

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