zoukankan      html  css  js  c++  java
  • hdu 5120 Intersection

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

    题意:求两个圆环的相交面积。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 int t;
     8 double r,R;
     9 struct point
    10 {
    11     double x,y;
    12     double r;
    13 };
    14 
    15 double circle_area(point a,point b)
    16 {
    17     double s,d,t,t1;
    18     d=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    19     if(d>=a.r+b.r) s=0;
    20     else if(d<=fabs(a.r-b.r)) s=min(acos(-1.0)*a.r*a.r,acos(-1.0)*b.r*b.r);
    21     else
    22     {
    23         t=(a.r*a.r+d*d-b.r*b.r)/2.0/d;
    24         t1=sqrt(a.r*a.r-t*t);
    25         s=-d*t1+a.r*a.r*acos(t/a.r)+b.r*b.r*acos((d-t)/b.r);
    26     }
    27     return s;
    28 }
    29 
    30 int main()
    31 {
    32     scanf("%d",&t);
    33     for(int cas=1; cas<=t; cas++)
    34     {
    35         scanf("%lf%lf",&r,&R);
    36         point st1,st2,st3,st4;
    37         double x,y;
    38         scanf("%lf%lf",&x,&y);
    39         st1.x=st2.x=x;
    40         st1.y=st2.y=y;
    41         st1.r=r;
    42         st2.r=R;
    43         scanf("%lf%lf",&x,&y);
    44         st3.x=st4.x=x;
    45         st3.y=st4.y=y;
    46         st3.r=r;
    47         st4.r=R;
    48         double ans=0;
    49         ans+=circle_area(st2,st4);
    50         ans-=circle_area(st1,st4);
    51         ans-=circle_area(st2,st3);
    52         ans+=circle_area(st1,st3);
    53         printf("Case #%d: %.6lf
    ",cas,ans);
    54     }
    55     return 0;
    56 }
    View Code
  • 相关阅读:
    Redis网络连接库剖析
    如何下载和安装pywin32
    Python游戏开发入门:pygame事件处理机制
    python常见错误
    波特率与比特率
    __gcd最大公约数
    动态规划算法之矩阵连乘问题
    二分插入排序+二分搜索
    office 总结
    javaWeb总结
  • 原文地址:https://www.cnblogs.com/fanminghui/p/4233616.html
Copyright © 2011-2022 走看看