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