#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; #define N 155 #define eps 1e-8 struct TPoint { double x,y; }s; struct TPolygon { int n; TPoint p[N]; }ply1,ply2,ans; double maxdist; int dblcmp(double a) {return a<-eps?-1:a>eps?1:0;} double MAX(double a,double b) {return a>b?a:b;} double cross(TPoint a,TPoint b,TPoint c) { return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x); } double plyarea(TPolygon res) { int i; double area=0; res.p[res.n]=res.p[0]; for(i=0;i<res.n;i++) area+=cross(s,res.p[i],res.p[i+1]); return area; } TPolygon cut(TPolygon res,TPoint s,TPoint e) { int d1,d2,i,t; double s1,s2; TPoint a; TPolygon b; b.n=0; res.p[res.n]=res.p[0]; for(i=0,t=0;i<res.n;i++) { d1=dblcmp(s1=cross(res.p[i],s,e)); d2=dblcmp(s2=cross(res.p[i+1],s,e)); if(d1>=0) b.p[t++]=res.p[i]; if(d1*d2<0) { a.x=(s2*res.p[i].x-s1*res.p[i+1].x)/(s2-s1); a.y=(s2*res.p[i].y-s1*res.p[i+1].y)/(s2-s1); b.p[t++]=a; } } b.n=t; return b; } int main() { while(scanf("%d",&ply1.n),ply1.n) { int i; double sumarea,area; for(i=0;i<ply1.n;i++) scanf("%lf%lf",&ply1.p[i].x,&ply1.p[i].y); s.x=0; s.y=0; if((dblcmp(sumarea=plyarea(ply1)))<0) reverse(ply1.p,ply1.p+ply1.n); ply1.p[ply1.n]=ply1.p[0]; sumarea=fabs(sumarea); scanf("%d",&ply2.n); for(i=0;i<ply2.n;i++) scanf("%lf%lf",&ply2.p[i].x,&ply2.p[i].y); if((dblcmp(area=plyarea(ply2)))<0) reverse(ply2.p,ply2.p+ply2.n); sumarea+=fabs(area); ply2.p[ply2.n]=ply2.p[0]; ans=ply1; for(i=0;i<ply2.n;i++) ans=cut(ans,ply2.p[i],ply2.p[i+1]); area=fabs(plyarea(ans)); printf("%8.2lf",sumarea/2-area); } puts(""); return 0; }