#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define PI 3.1415926535897932384626433832795
struct 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;
}
水体,测试一下模版!