Tell me the area---hdu1798 (数学 几何)

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
");
            continue;
        }
        else if(l<=fabs(r1-r2))
        {

            printf("%.3lf
",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
",ss1+ss2-S);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/linliu/p/5396734.html