zoukankan      html  css  js  c++  java
  • 两圆相交面积

    //求两圆相交的面积
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #define esp 1e-8
    
    using namespace std;
    
    struct Circle{
        double x,y;
        double r;
    }p[3000];
    int cmp(Circle ta,Circle tb)
    {
        return ta.x<tb.x;
    }
    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()
    {
        double ans=0;
        int n,r;
        cin>>n>>r;
        for(int i=1;i<=n;i++)
            scanf("%lf",&p[i].x),p[i].r=r,p[i].y=0;
        sort(p+1,p+n+1,cmp);
        ans=n*acos(-1.0)*r*r;
        for(int i=1;i<n;i++)
            ans-=calArea(p[i+1],p[i]);
        printf("%.12lf
    ",ans);
        return 0;
    }
  • 相关阅读:
    Maven入门指南12:将项目发布到私服
    Groovy学习:第四章 Groovy特性深入
    jQuery部分疑问及小结
    Windows自动化---模拟鼠标键盘
    适配器
    object都有string
    spinner
    context
    OnclickListener
    学习-----领进门,看个人
  • 原文地址:https://www.cnblogs.com/weeping/p/5749058.html
Copyright © 2011-2022 走看看