zoukankan      html  css  js  c++  java
  • HDU5120-Intersection-两个圆环相交面积

    终究还是我太蠢了!!!!


    原来这是两个同心圆的相交部分,(最中间是空的)我画的1和2部分加起来就是了。

    无法理解字面意思。害

    题意:计算两个一样的圆环相交的面积,给出r1小的圆的半径,r2是大的圆的半径,接下去给出两行x、y,代表两个圆环的圆心。

    思路:

    两个大的圆的相交部分-左边大圆和右边小圆的相交部分-左边小圆和右边大圆的相交部分+左右小圆的相交部分。

    AC代码:

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<string.h>
     6 
     7 using namespace std;
     8 typedef long long ll;
     9 #define inf 0x3f3f3f3f
    10 #define PI acos(-1.0)//不是-1
    11 #define eps 1e-9
    12 
    13 struct node
    14 {
    15     int x,y;
    16 }a,b;
    17 
    18 double s(double r1,double r2)
    19 {
    20     double d=sqrt((a.x-b.x)*(a.x-b.x)*1.0+(a.y-b.y)*(a.y-b.y)*1.0);
    21     if(r1+r2<d+eps)
    22         return 0;//相离
    23     if(d<fabs(r1-r2)+eps)
    24     {
    25         double minn=min(r1,r2);
    26         return PI*minn*minn;
    27     }
    28     double t=(d*d+r1*r1-r2*r2)/(2*d);
    29     double x=acos(t/r1),y=acos((d-t)/r2);
    30     return r1*r1*x+r2*r2*y-d*r1*sin(x);
    31 }
    32 
    33 int main()
    34 {
    35     int T,cas=1;
    36     scanf("%d",&T);
    37     while(T--)
    38     {
    39         double r1,r2;
    40         scanf("%lf %lf",&r1,&r2);
    41         scanf("%d %d %d %d",&a.x,&a.y,&b.x,&b.y);
    42         double ans=s(r2,r2)-s(r1,r2)-s(r2,r1)+s(r1,r1);
    43         printf("Case #%d: %.6lf
    ",cas++,ans);
    44     }
    45     return 0;
    46 }
    View Code
  • 相关阅读:
    iOS—UI —推送实现
    iOS—UI —懒加载
    iOS多线程和NSRunLoop概述
    ios安全性---AES加密
    iOS私有API
    iOS多线程 && Runloop
    iOS毛玻璃效果
    Swift -4-对象与类
    Swift -3-函数&闭包
    Swift -1- 简介&简单值&基本类型
  • 原文地址:https://www.cnblogs.com/OFSHK/p/12722788.html
Copyright © 2011-2022 走看看