http://acm.hdu.edu.cn/showproblem.php?pid=1798
给你两个圆求阴影部分的面积
求出两个扇形的面积减去四边形的面积
扇形的面积是度数(弧度制)*半径的平方
不能用PI 3.1415926 要用acos(-1.0);
求四边形面积就是两个三角形 用海伦公式
因为精确度比较高 所以就不能用PI 3.1415926
#include <iostream> #include <cstring> #include <algorithm> #include <queue> #include <cstdio> #include <cstdlib> #include <cctype> #include <math.h> using namespace std; #define memset(a,b) memset(a,b,sizeof(a)) #define N 1100000 typedef long long ll; #define PI 3.1415926 int main() { double x1,y1,r1,x2,y2,r2; while(scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&r1,&x2,&y2,&r2)!=EOF) { double rr=min(r1,r2); double l=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); if(l>=r1+r2) { printf("0.000\n"); continue; } else if(l<=fabs(r1-r2)) { printf("%.3lf\n",acos(-1.0)*rr*rr); continue; } double cos1=(r1*r1+l*l-r2*r2)/(2.0*r1*l); double cos2=(r2*r2+l*l-r1*r1)/(2.0*r2*l); double ss1=r1*acos(cos1)*r1;///r1扇形的面积 double ss2=r2*acos(cos2)*r2; double p=(r1+r2+l)/2.0;/// double S=2*sqrt(p*(p-r1)*(p-r2)*(p-l));///四边形的面积 printf("%.3lf\n",ss1+ss2-S); } return 0; }
时间: 2024-09-29 04:46:06