#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define pi acos((long double)-1)
#define eps 1e-11
long double aabs(long double x)
{
return (long double)(x>0?x:(-x));
}
struct dn
{
long double x,y;
};
struct dn operator+(struct dn u,struct dn v)
{
return(struct dn){u.x+v.x,u.y+v.y};
}
struct dn operator-(struct dn u,struct dn v)
{
return(struct dn){u.x-v.x,u.y-v.y};
}
struct dn operator*(long double u,struct dn v)
{
return(struct dn){u*v.x,u*v.y};
}
struct dn operator/(struct dn u,long double v)
{
return(struct dn){u.x/v,u.y/v};
}
long double operator/(struct dn u,struct dn v)
{
return u.x*v.y-v.x*u.y;
}
long double operator*(struct dn u,struct dn v)
{
return u.x*v.x+u.y*v.y;
}
long double dis(struct dn o)
{
long double temp=o.x*o.x+o.y*o.y>0?o.x*o.x+o.y*o.y:0;
return sqrt(temp);
}
struct dn dd(long double o)
{
return(struct dn){cos(o),sin(o)};
}
struct dn g[5];
int top;
void swap(struct dn *a,struct dn *b)
{
struct dn temp=(*a);
(*a)=(*b);
(*b)=temp;
}
void sswap(long double *a,long double *b)
{
long double temp=(*a);
(*a)=(*b);
(*b)=temp;
}
int jd(struct dn o1,long double r1,struct dn o2,long double r2,struct dn p,struct dn q,struct dn *u,struct dn *v)
{
top=0;
struct dn o=(o1-p)*(q-p)*(q-p)/((q-p)*(q-p))+p;
if(dis(o-o1)<r1-eps)
{
g[top]=(o+sqrt(r1*r1-(o1-o)*(o1-o))*(q-p)/dis(q-p));
top++;
g[top]=(o-sqrt(r1*r1-(o1-o)*(o1-o))*(q-p)/dis(q-p));
top++;
}
o=(o2-p)*(q-p)*(q-p)/((q-p)*(q-p))+p;
if(dis(o-o2)<r2-eps)
{
g[top]=(o+sqrt(r2*r2-(o2-o)*(o2-o))*(q-p)/dis(q-p));
top++;
g[top]=(o-sqrt(r2*r2-(o2-o)*(o2-o))*(q-p)/dis(q-p));
top++;
}
int i;
for(i=0;i<top;i++)
{
int ok=0;
int j;
for(j=0;j<i;j++)
{
if(dis(g[i]-g[j])<eps)
{
ok=1;
}
}
if(dis(g[i]-o1)>r1+eps||dis(g[i]-o2)>r2+eps)
{
ok=1;
}
if((g[i]-p)*(q-p)<-eps)
{
ok=1;
}
if(ok)
{
swap(&g[i],&g[top-1]);
top--;
i--;
}
}
if(top>0)
{
*u=g[0];
}
if(top>1)
{
*v=g[1];
}
if(top==2&&((*u)-p)*(q-p)>((*v)-p)*(q-p))
{
swap(&(*u),&(*v));
}
return top;
}
long double arc(struct dn o,long double r,struct dn u,struct dn v)
{
long double w=(v-o)*(u-o)/r/r;
w=(long double)(w>(-1)?w:(-1));
w=(long double)(w<1?w:1);
if((o-u)/(v-u)>0)
{
return 0.5*acos(w)*r*r-0.5*aabs((v-o)/(u-o));
}
else
{
return pi*r*r-0.5*acos(w)*r*r+0.5*aabs((v-o)/(u-o));
}
}
long double ar(struct dn o1,long double r1,struct dn o2,long double r2,struct dn u,struct dn v,int www)
{
if(dis(o2-o1)<r2-r1+eps)
{
if(www)
{
return pi*r1*r1;
}
else
{
return arc(o1,r1,u,v);
}
}
struct dn d1,d2;
struct dn o=(r1*r1+(o2-o1)*(o2-o1)-r2*r2)/(2*r1*dis(o2-o1))*r1*(o2-o1)/dis(o2-o1);
struct dn w=sqrt(r1*r1-o*o)*o/dis(o);
d1=o1+o+(struct dn){w.y,-w.x};
d2=o1+o-(struct dn){w.y,-w.x};
if(o*(o2-o1)<eps)
{
swap(&d1,&d2);
}
long double aa=arc(o1,r1,d2,d1)+arc(o2,r2,d1,d2);
if(www)
{
return aa;
}
if((u-d1)/(d2-d1)<eps&&(v-d1)/(d2-d1)<eps)
{
if((0.5*(d1+d2)-u)/(v-u)>eps||(0.5*(d1+d2)-u)/(v-u)>-eps&&(v-u)*(d2-d1)>0)
{
return arc(o2,r2,u,v);
}
else
{
return aa-arc(o2,r2,v,u);
}
}
if((u-d1)/(d2-d1)>-eps&&(v-d1)/(d2-d1)>-eps)
{
if((0.5*(d1+d2)-u)/(v-u)>eps||(0.5*(d1+d2)-u)/(v-u)>-eps&&(v-u)*(d1-d2)>0)
{
return arc(o1,r1,u,v);
}
else
{
return aa-arc(o1,r1,v,u);
}
}
if((u-d1)/(d2-d1)>-eps)
{
return arc(o1,r1,u,d1)+arc(o2,r2,d1,v)+0.5*aabs((u-d1)/(v-d1));
}
else
{
return arc(o1,r1,d2,v)+arc(o2,r2,u,d2)+0.5*aabs((u-d2)/(v-d2));
}
}
long double cc(long double p,long double q,struct dn o1,long double r1,struct dn o2,long double r2)
{
if(dis(o1-o2)>r1+r2-eps)
{
return 0;
}
if(r1>r2)
{
swap(&o1,&o2);
sswap(&r1,&r2);
}
if(r1<eps)
{
return 0;
}
if(dis(o1)<r1-eps&&dis(o2)<r2-eps)
{
struct dn u,v;
jd(o1,r1,o2,r2,(struct dn){0,0},dd(p),&u,&v);
jd(o1,r1,o2,r2,(struct dn){0,0},dd(q),&v,&u);
return dis(u-v)<eps?0:ar(o1,r1,o2,r2,v,u,0)+0.5*aabs(u/v);
}
else
{
struct dn u1,u2,v1,v2;
int ok1,ok2;
ok1=jd(o1,r1,o2,r2,(struct dn){0,0},dd(p),&u1,&u2);
ok2=jd(o1,r1,o2,r2,(struct dn){0,0},dd(q),&v1,&v2);
if(ok1==1)
{
ok1=0;
}
if(ok2==1)
{
ok2=0;
}
long double aa=ar(o1,r1,o2,r2,(struct dn){0,0},(struct dn){0,0},1);
if(!ok1&&!ok2)
{
struct dn o;
if(dis(o1-o2)<r2-r1+eps)
{
o=o1;
}
else
{
o=(r1*r1+(o2-o1)*(o2-o1)-r2*r2)/(2*r1*dis(o2-o1))*r1*(o2-o1)/dis(o2-o1)+o1;
}
if(o/dd(p)<-eps&&o/dd(q)>eps)
{
return aa;
}
else
{
return 0;
}
}
if(ok1)
{
aa-=ar(o1,r1,o2,r2,u2,u1,0);
}
if(ok2)
{
aa-=ar(o1,r1,o2,r2,v1,v2,0);
}
return aa;
}
}
int main()
{
int t=100000;
scanf("%d",&t);
int tt;
for(tt=1;tt<=t;tt++)
{
double a,a1,a2,z1,z2,r1,r2;
a=rand()%89+1;
a1=rand()%360;
a2=rand()%360;
z1=rand()%2001;
z2=rand()%2001;
r1=rand()%2001;
r2=rand()%2001;
scanf("%lf%lf%lf%lf%lf%lf%lf",&a,&a1,&a2,&z1,&z2,&r1,&r2);
a2=a2-a1+360;
if(a2>=360)
{
a2-=360;
}
a1=0;
if(a2>180)
{
a2=360-a2;
}
a=sin(a/180*pi);
long double ans=0;
ans+=cc(0,a2/180*pi*a,z2*dd(a2/180*pi*a),r2,z1*dd(0),r1);
ans+=cc(0,(180-a2)/180*pi*a,z2*dd(0),r2,z1*dd(-a2/180*pi*a),r1);
ans+=cc(0,a2/180*pi*a,z2*dd(-(180-a2)/180*pi*a),r2,z1*dd(pi*a),r1);
ans+=cc(0,(180-a2)/180*pi*a,z2*dd(pi*a),r2,z1*dd((180-a2)/180*pi*a),r1);
printf("%.30f\n",(double)ans);
}
}