poj2546Circular Area(两圆相交面积)

链接

画图推公式 

poj2546Circular Area(两圆相交面积)

这两种情况 都可用一种公式算出来 就是两圆都求出圆心角 求出扇形的面积减掉三角形面积 

#include <iostream>

using namespace std;

#include<cmath>

#include<iomanip>

#include<algorithm>

int main()

{

    double d,t,t1,s,x,y,xx,yy,r,rr;

    while(cin>>x>>y>>r)

    {

        cin>>xx>>yy>>rr;

        d=sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy));

        if(d>=r+rr) s=0;

        else if(d<=fabs(r-rr)) s=min(acos(-1.0)*r*r,acos(-1.0)*rr*rr);

        else   

        {t=(r*r+d*d-rr*rr)/2.0/d;

        t1=sqrt(r*r-t*t);

        s=-d*t1+r*r*acos(t/r)+rr*rr*acos((d-t)/rr);

        }

        cout<<fixed<<setprecision(3)<<s<<endl;

    }

    return 0;

} 

 

你可能感兴趣的:(poj)