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;
    }
  • 相关阅读:
    Exception和Error有什么区别?
    网络流量劫持的含义
    安全术语:
    加载相关
    10、接到任务后的整个测试前准备流程总结
    fiddler工具栏数据解释
    HTTP的请求头标签 If-Modified-Since
    VueStudyDemo
    Vue从入门到放弃
    TypeScript初体验
  • 原文地址:https://www.cnblogs.com/weeping/p/5749058.html
Copyright © 2011-2022 走看看