poj2546

来源:互联网 发布:javaweb就业前景 知乎 编辑:程序博客网 时间:2024/06/03 19:16

裸的 两圆相交求面积。

设两圆心分别为o1、o2,交点为a、b,则所求面积=是s1(o1弧ab)+s2(o2弧ab)-s3(四边形o1o2ab)。

 

#include<stdio.h>#include<math.h>#include<iostream>#include<algorithm>using namespace std;#define PI 3.1415926535897932384626433832795struct point{    double x,y,r;}a,b;double dis(point a,point b){    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}double interarea(point a,point b){   double d=dis(a,b);   if(d>=a.r+b.r)return 0;   double r=a.r>b.r?b.r:a.r;   if(d<=fabs(a.r-b.r))return PI*r*r;   double angle1=acos((a.r*a.r+d*d-b.r*b.r)/2.0/a.r/d);   double angle2=acos((b.r*b.r+d*d-a.r*a.r)/2.0/b.r/d);   double ans=0;   ans-=d*a.r*sin(angle1);   ans+=angle1*a.r*a.r+angle2*b.r*b.r;   return ans;}int main(){    while(scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&a.r,&b.x,&b.y,&b.r)!=EOF)    {        double area=interarea(a,b);        printf("%.3lf\n",area);    }    return 0;}


 

原创粉丝点击