HDU-5858-Hard problem(几何)

来源:互联网 发布:unix环境编程视频 编辑:程序博客网 时间:2024/05/20 23:07

链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5858

题意:知道正方形边长,求阴影部分面积


题解:直接求出两圆相交部分面积。

CODE:


#include <bits/stdc++.h>using namespace std;#define PI acos(-1)#define eps 1e-5double Area_of_overlap(double d,double r1,double r2){    if(r1 + r2 < d + eps)return 0;    if(d < fabs(r1 - r2) + eps)    {        double r = min(r1,r2);        return PI*r*r;    }    double x = (d*d + r1*r1 - r2*r2)/(2*d);    double t1 = acos(x / r1);    double t2 = acos((d - x)/r2);    return r1*r1*t1 + r2*r2*t2 - d*r1*sin(t1);}int main(){    int t;    double l;    double d;    double r1,r2;    double ans;    double s;    scanf("%d",&t);    while(t--)    {        scanf("%lf",&l);        d=sqrt(2.0)/2.0*l;        r1=l;        r2=l/2.0;        s=PI*r2*r2;        ans=Area_of_overlap(d,r1,r2);        ans=2*(s-ans);        printf("%.2lf\n",ans);    }    return 0;}


0 0