hdu 1115 Lifting the Stone 计算几何 求多边形的重心

hdu 1115 Lifting the Stone 计算几何 求多边形的重心
# include < iostream >
# include
< algorithm >
using   namespace  std;
const   int  maxNum  =   1000000   + 2 ;
struct  point {  double  x, y; };
struct  point data[maxNum];
struct  point bcenter( struct  point pnt[],  int  n){
    point p, s;
    
double  tp, area  =   0 , tpx  =   0 , tpy  =   0 ;
    p.x 
=  pnt[ 0 ].x; p.y  =  pnt[ 0 ].y;
    
for  ( int  i  =   1 ; i  <=  n;  ++ i) {  //  point: 0 ~ n-1
        s.x  =  pnt[(i  ==  n)  ?   0  : i].x;
        s.y 
=  pnt[(i  ==  n)  ?   0  : i].y;
        tp 
=  (p.x  *  s.y  -  s.x  *  p.y); area  +=  tp  /   2 ;
        tpx 
+=  (p.x  +  s.x)  *  tp; tpy  +=  (p.y  +  s.y)  *  tp;
        p.x 
=  s.x; p.y  =  s.y;
    }
    s.x 
=  tpx  /  ( 6   *  area); s.y  =  tpy  /  ( 6   *  area);
    
return  s;
}
int  main()
{
 
    
int  T,i,j,num;
    
struct  point re;
    scanf(
" %d " , & T);
    
while (T -- )
    {
        scanf(
" %d " , & num);
        
for (i  =   0 ; i  <  num ; i  ++ )
            scanf(
" %lf %lf " , & data[i].x, & data[i].y);
        
// sort(data,data+num);
        re  =  bcenter(data,num);
        printf(
" %.2lf %.2lf\n " ,re.x,re.y);
    }
    
return   0 ;
}

你可能感兴趣的:(hdu 1115 Lifting the Stone 计算几何 求多边形的重心)