• hdu 5120 Intersection 圆环面积交


    Intersection

    Time Limit: 1 Sec  

    Memory Limit: 256 MB

    题目连接

    http://acm.hdu.edu.cn/showproblem.php?pid=5120

    Description

    Matt is a big fan of logo design. Recently he falls in love with logo made up by rings. The following figures are some famous examples you may know.


    A ring is a 2-D figure bounded by two circles sharing the common center. The radius for these circles are denoted by r and R (r < R). For more details, refer to the gray part in the illustration below.


    Matt just designed a new logo consisting of two rings with the same size in the 2-D plane. For his interests, Matt would like to know the area of the intersection of these two rings.

    Input

    The first line contains only one integer T (T ≤ 105), which indicates the number of test cases. For each test case, the first line contains two integers r, R (0 ≤ r < R ≤ 10).

    Each of the following two lines contains two integers xi, yi (0 ≤ xi, yi ≤ 20) indicating the coordinates of the center of each ring.

    Output

    For each test case, output a single line “Case #x: y”, where x is the case number (starting from 1) and y is the area of intersection rounded to 6 decimal places.

    Sample Input

    2
    2 3
    0 0
    0 0
    2 3
    0 0
    5 0

    Sample Output

    Case #1: 15.707963
    Case #2: 2.250778

    HINT

    题意

    给你两个一样的圆环,问你这两个圆环相交的面积是多少

    题解:

    容斥定理就好了,剩下的都是套版

    面积=大交大-大交小+小交小

    代码:

    //qscqesze
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <bitset>
    #include <vector>
    #include <sstream>
    #include <queue>
    #include <typeinfo>
    #include <fstream>
    #include <map>
    #include <stack>
    typedef long long ll;
    using namespace std;
    //freopen("D.in","r",stdin);
    //freopen("D.out","w",stdout);
    #define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
    #define maxn 1000006
    #define mod 1001
    #define eps 1e-9
    #define PI acos(-1)
    const double EP  = 1E-10 ;
    int Num;
    //const int inf=0x7fffffff;
    const ll inf=999999999;
    inline ll read()
    {
        ll x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //*************************************************************************************
    struct Circle{
        double x,y;
        double r;
    };
    
    double calArea(Circle c1, Circle c2)
    {
        double d;
        double s,s1,s2,s3,angle1,angle2,temp;
    
        d=sqrt((c1.x-c2.x)*(c1.x-c2.x)+(c1.y-c2.y)*(c1.y-c2.y));
        if(d>=(c1.r+c2.r))//两圆相离
            return 0;
        if((c1.r-c2.r)>=d)//两圆内含,c1大
            return acos(-1.0)*c2.r*c2.r;
        if((c2.r-c1.r)>=d)//两圆内含,c2大
            return acos(-1.0)*c1.r*c1.r;
    
        angle1=acos((c1.r*c1.r+d*d-c2.r*c2.r)/(2*c1.r*d));
        angle2=acos((c2.r*c2.r+d*d-c1.r*c1.r)/(2*c2.r*d));
    
        s1=angle1*c1.r*c1.r;s2=angle2*c2.r*c2.r;
        s3=c1.r*d*sin(angle1);
        s=s1+s2-s3;
    
        return s;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        for(int cas = 1;cas <= t;cas++)
        {
            Circle a1,a2,b1,b2;
            double R,r;
            scanf("%lf%lf",&a1.r,&a2.r);
            b1.r=a1.r;
            b2.r=a2.r;
            scanf("%lf%lf",&a1.x,&a1.y);
            scanf("%lf%lf",&b1.x,&b1.y);
            a2.x=a1.x;
            a2.y=a1.y;
            b2.x=b1.x;
            b2.y=b1.y;
            double ans = 0;
            ans += calArea(a1,b1);
            ans -= calArea(a1,b2);
            ans -= calArea(b1,a2);
            ans += calArea(a2,b2);
            printf("Case #%d: %.6lf
    ",cas,ans);
        }
    }
  • 相关阅读:
    python多线程爬虫:亚马逊价格
    python在linux中输出带颜色的文字的方法
    单线程爬虫VS多线程爬虫的效率对比
    python爬虫:正则表达式
    爬虫-python调用百度API/requests
    Python gevent学习笔记-2
    Python gevent学习笔记
    IO多路复用之select总结
    select、poll、epoll之间的区别总结[整理]
    2020年 IEDA破解码失效,2019 版IDEA无法使用 ,已解决,有效期2100年;原标题:IDEA激活—免费永久激活(lookdiv.com)
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4817578.html
Copyright © 2020-2023  润新知