zoukankan      html  css  js  c++  java
  • hdu 5120 (求两圆相交的面积的公式*)

    S = A大B大 - A大B小 - A小B大 + A小B小。(A表示A环,大表示大圆,B同)。然后直接套模板,,,,

     1 #include <stdio.h>
     2 #include <algorithm>
     3 #include <string.h>
     4 #include <cmath>
     5 using namespace std;
     6 
     7 const double eps = 1e-8;
     8 const double PI = acos(-1.0);
     9 
    10 int sgn(double x)
    11 {
    12     if(fabs(x) < eps) return 0;
    13     if(x < 0) return - 1;
    14     else return 1;
    15 }
    16 struct Point
    17 {
    18     double x, y;
    19     Point(){}
    20     Point(double _x, double _y)
    21     {
    22         x = _x; y = _y;
    23     }
    24     Point operator -( const Point &b) const
    25     {
    26         return Point(x - b. x, y - b. y);
    27     }
    28 
    29     double operator ^ (const Point &b) const
    30     {
    31         return x*b. y - y*b. x;
    32     }
    33 
    34     double operator * (const Point &b) const
    35     {
    36         return x*b. x + y*b. y;
    37     }
    38 
    39     void transXY(double B)
    40     {
    41         double tx = x,ty = y;
    42         x = tx* cos(B) - ty*sin(B);
    43         y = tx* sin(B) + ty*cos(B);
    44     }
    45 };
    46 
    47 double dist( Point a, Point b)
    48 {
    49     return sqrt((a-b)*(a- b));
    50 }
    51 
    52 double Ac(Point c1, double r1, Point c2, double r2)
    53 {
    54     double d = dist(c1,c2);
    55     if(r1 + r2 < d + eps) return 0;
    56     if(d < fabs(r1 - r2) + eps)
    57     {
    58         double r = min(r1,r2);
    59         return PI*r*r;
    60     }
    61     double x = (d*d + r1*r1 - r2*r2)/(2*d);
    62     double t1 = acos(x / r1);
    63     double t2 = acos((d - x)/r2);
    64     return r1*r1*t1 + r2*r2*t2 - d*r1*sin(t1);
    65 }
    66 
    67 int main() {
    68     int T; Point c1, c2;
    69     double ans, r, R, x1, y1, x2, y2;
    70     scanf("%d", &T);
    71     for(int cas = 1; cas <= T; ++cas) {
    72         scanf("%lf%lf%lf%lf%lf%lf", &r, &R, &x1, &y1, &x2, &y2);
    73         c1.x = x1; c1.y = y1;
    74         c2.x = x2; c2.y = y2;
    75         ans = Ac(c1, R, c2, R) - Ac(c1, R, c2, r) - Ac(c1, r, c2, R)
    76                 + Ac(c1, r, c2, r);
    77         printf("Case #%d: %.6lf
    ", cas, ans);
    78     }
    79     return 0;
    80 }
  • 相关阅读:
    Serverless 动态博客开发趟“坑”记
    tsv与csv文件
    zypper
    source、sh、./三种执行方式对脚本变量的影响
    linux nm
    ldconfig
    cpio
    License简介
    rpm之spec文件
    使用rpmbuild制作rpm包
  • 原文地址:https://www.cnblogs.com/shimu/p/5835402.html
Copyright © 2011-2022 走看看