zoukankan      html  css  js  c++  java
  • HDU

    #include<stdio.h>
    #include<math.h>
    const double eps = 1e-8;
    const double pi = acos(-1.0);
    struct Point
    {
        double x,y;
    };
    struct circle
    {
        Point pp;
        double r;
    }cir[30];
    double area[30];
    int n;
    double cir_area_inst(Point c1,double r1,Point c2,double r2)
    {  //两圆面积交
        double a1, a2, d, ret;
        d = sqrt((c1.x-c2.x)*(c1.x-c2.x)+(c1.y-c2.y)*(c1.y-c2.y));
        //圆心距离
        if ( d > r1 + r2 - eps )
            return 0;            //相离
        if ( d < r2 - r1 + eps )
            return pi*r1*r1;   //内切与包含
        if ( d < r1 - r2 + eps )
            return pi*r2*r2;   //内切与包含
        a1 = acos((r1*r1+d*d-r2*r2)/2/d/r1);//相交
        //余弦定理求角
        a2 = acos((r2*r2+d*d-r1*r1)/2/d/r2);
        ret = (a1-0.5*sin(2*a1))*r1*r1 + (a2-0.5*sin(2*a2))*r2*r2;
        //求楔形(扇形减三角形)面积
        return ret;
    
    }
    bool judge(Point p,double r)//枚举每个圆心
    {
        int i,j;
        for(i=0;i<n;i++)
        {
            double Are = cir_area_inst(p,r,cir[i].pp,cir[i].r);
            if(Are<area[i])return false;
        }
        return true;
    }
    int main()
    {
        int t,i,j;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(i=0;i<n;i++)
            {
                scanf("%lf %lf %lf",&cir[i].pp.x,&cir[i].pp.y,&cir[i].r);
                area[i] = pi*cir[i].r*cir[i].r/2;
            }
            Point a;
        double rans = 200000;  //初始化符合要求的大圆半径
        for(i=0;i<n;i++)
        {
            a = cir[i].pp;
            double l=0,r=200000,mid;
            while(fabs(l-r)>eps)//二分法
            {
                mid = (l+r)/2;
                if(judge(a,mid))
                {
                    r =mid;
                    if(mid<rans)//找符合要求的最小的圆
                    rans =mid;
                }
                else l=mid;
            }
        }
        printf("%.4lf
    ",rans);
        }
        return 0;
    }
    

      

    from:http://www.cnblogs.com/XDJjy/archive/2013/04/02/2995918.html

  • 相关阅读:
    Ubuntu16.04.1 安装Nginx
    Ubuntu16.04.1 安装Redis-Cluster
    SeekBar的简单使用
    Async异步处理
    SQLite
    Shareprefrence
    android中的主线程
    Fragment的简单使用
    ArrayAdapter的使用
    用Intent传递对数
  • 原文地址:https://www.cnblogs.com/NWUACM/p/6406486.html
Copyright © 2011-2022 走看看