1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <string> #include <vector> #include <queue> #include <stack> #include <map> #include <set> #include <algorithm> #include <cmath> #define For(i,m,n) for(int i=m;i< n;i++) #define FFor(i,m,n) for(int i=m;i<=n;i++) #define bug(x) cout<<#x<<"="<<x<<endl; #define INF 0x3f3f3f3f #define Pi acos(-1.0) #define Pow(a,b) pow(a,b) using namespace std; typedef long long ll;
struct Point{ double x,y; };
double getS(Point a,Point b,Point c) { return ((b.x - a.x) * (c.y - a.y) - (b.y - a.y)*(c.x - a.x))/2; }
double getPS(Point p[],int n) { double sumS=0; FFor(i,2,n-1){ sumS+=getS(p[1],p[i],p[i+1]); } return sumS; }
Point getPZ(Point p[],int n) { Point z; double sumx = 0,sumy = 0; double sumS = 0; FFor(i,2,n-1){ double S = getS(p[1],p[i],p[i+1]); sumS += S; sumx += (p[1].x+p[i].x+p[i+1].x)*S; sumy += (p[1].y+p[i].y+p[i+1].y)*S; } if(sumS==0){ z.x = 0,z.y = 0; return z; } z.x = sumx / (sumS ); z.y = sumy / (sumS ); return z; }
Point p[10005];
int main() { int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); FFor(i,1,n) scanf("%lf%lf",&p[i].x,&p[i].y); Point z = getPZ(p,n); printf("%.3lf %.3lf\n",fabs(getPS(p,n)),(z.x+z.y)/3); } return 0; }
|