#include #include using namespace std; double p[4][32]; double CalcArea(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4 ) { return ((x2-x1)*(y3-y1)+(x4-x2)*(y3-y2)-(y2-y1)*(x3-x1)-(y4-y2)*(x3-x2))/2; } /* double CalcArea(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4 ) { double a, b, c, d, x, y; a = x2 - x1; c = y2 - y1; b = x3 - x1; d = y3 - y1; //cout << "test = " << a*d - b*c << endl; x = (x4 - x1) / (a + b); y = (y4 - y1) / (c + d); double xpy = x4/(a+b) + y4/(c+d) - x1/(a+b) - y1/(c+d); //double xpy = x4/(a+c) + y4/(b+d) - x1/(a+c) - y1/(b+d); return (a*d-b*c) * (xpy) / 2; } */ /* double CalcArea(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4 ) { double dx1, dx2; dx1 = x2 - x1 - (x3 - x1)*(y2 - y1)/(y3 - y1); dx2 = x4 - x3 - (x3 - x1)*(y4 - y3)/(y3 - y1); return (dx1 + dx2) * (y3 - y1) / 2; } */ void CalcPoint(double a, double b, double c, double d, double *x, double *y) { *x = (a + (b-a)*c) / (1 - (b-a)*(d-c)); *y = (d-c)*(*x) + c; //cout << "(" << *x << ", " << *y << ")" << endl; /*for(int i=0; i<100; i++){ double xx, yy; xx = a - (a-b)*(*y); yy = c - (c-d)*(*x); (*x) = xx; (*y) = yy; }*/ return; } int main() { int n; while((cin >> n) && n){ for(int i=0; i<4; i++){ p[i][0] = 0.0; for(int j=1; j<=n; j++){ double buf; cin >> buf; p[i][j] = buf; } p[i][n+1] = 1.0; } double areamax = 0.0; for(int i=0; i<=n; i++){ for(int j=0; j<=n; j++){ double x1,y1, x2,y2, x3,y3, x4,y4; CalcPoint(p[0][i], p[1][i], p[2][j], p[3][j], &x1, &y1); CalcPoint(p[0][i+1], p[1][i+1], p[2][j], p[3][j], &x2, &y2); CalcPoint(p[0][i], p[1][i], p[2][j+1], p[3][j+1], &x3, &y3); CalcPoint(p[0][i+1], p[1][i+1], p[2][j+1], p[3][j+1], &x4, &y4); double area = CalcArea(x1,y1, x2,y2, x3,y3, x4,y4); //cout << i << "," << j << " area=" << area << endl; if(areamax < area) areamax = area; } } printf("%6f\n", areamax); } return 0; }