zoukankan      html  css  js  c++  java
  • 【poj2546】 Circular Area

    http://poj.org/problem?id=2546 (题目链接)

    题意

      求两圆的面积交

    Solution

      一道水题Wa死我了,肯定是昨晚搞太晚的缘故= =。

      两圆的位置关系有5种,而这里要求它们的面积交,分三种情况就可以了。

      第一,外离和外切,面积为0

      第二,内切和内含,面积为较小的圆的面积。

      第三,相交。我们可以把它们相交的面积分成两个弓形,进而求这两个弓形的面积。弓形的面积就是扇形的面积减去一个三角形的面积,三角形的面积可以用海伦公式,而对于扇形,我们要用余弦定理先求出它的圆心角再acos一下就ok了。

    代码

    // poj2546
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<cmath>
    #include<map>
    #define inf 2147483640
    #define LL long long
    #define Pi acos(-1.0)
    #define free(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout);
    using namespace std;
    inline LL getint() {
        LL x=0,f=1;char ch=getchar();
        while (ch>'9' || ch<'0') {if (ch=='-') f=-1;ch=getchar();}
        while (ch>='0' && ch<='9') {x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    
    
    
    int main() {
        double x1,x2,r1,r2,y1,y2;
        while (scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&r1,&x2,&y2,&r2)!=EOF) {
            double x=abs(x1-x2);
            double y=abs(y1-y2);
            double l=sqrt(x*x+y*y);
            if (r1<r2) swap(r1,r2);
            if (r1+r2<=l) printf("0.000
    ");
            else if (abs(r1-r2)>=l) printf("%.3f
    ",Pi*min(r1*r1,r2*r2));
            else {
                double a=r1,b=r2,c=l;
                double A=acos((c*c+b*b-a*a)/(2*c*b));
                double B=acos((c*c+a*a-b*b)/(2*c*a));
                double s=(a+b+c)/2;
                s=sqrt(s*(s-a)*(s-b)*(s-c));
                double area=a*a*B+b*b*A-2*s;
                printf("%.3f
    ",area);
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    Two Sum II
    Subarray Sum
    Intersection of Two Arrays
    Reorder List
    Convert Sorted List to Binary Search Tree
    Remove Duplicates from Sorted List II
    Partition List
    Linked List Cycle II
    Sort List
    struts2结果跳转和参数获取
  • 原文地址:https://www.cnblogs.com/MashiroSky/p/5914413.html
Copyright © 2011-2022 走看看