#include #include #include #include #include using std::sort; struct Point { double x,y; Point(double x=0,double y=0):x(x),y(y){} }; typedef Point Vector; inline Vector operator+(const Vector &A,const Vector &B) { return Vector(A.x+B.x,A.y+B.y); } inline Vector operator-(const Point &a,const Point &b) { return Vector(a.x-b.x,a.y-b.y); } inline Vector operator*(const Vector &A,double p) { return Vector(A.x*p,A.y*p); } inline Vector operator/(const Vector &A,double p) { return Vector(A.x/p,A.y/p); } inline bool operator<(const Point &a,const Point &b) { return a.x0?x:-x)0?1:-1); } const double Pi=atan(1)*4; inline double D_to_R(double D) { return Pi/180*D; } inline double Cross(const Vector &A,const Vector &B) { return A.x*B.y-A.y*B.x; } inline Vector Rotate(const Vector &A,double rad) { double csr=cos(rad),sir=sin(rad); return Vector(A.x*csr-A.y*sir,A.x*sir+A.y*csr); } inline double PolygonArea(Point* p,int n) { double area=0; for(int i=1;i1&&Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--; ch[m++]=p[i]; } int k=m; for(int i=n-2;i>=0;i--) { while(m>k&&Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--; ch[m++]=p[i]; } if(n>1) m--; return m; } using namespace std; int T,n,m; double sumx,sumy,res; Point p[10005],ch[10005]; double X1,Y1,X2,Y2; double A,B,C; int main() { #ifdef local freopen("pro.in","r",stdin); #endif scanf("%d",&T); for(int kase=1;kase<=T;kase++) { scanf("%d",&n); sumx=0;sumy=0; for(int i=0;i