多边形重心

对于三角形来说,重心就是x=(x1+x2+x3)/3,y=(y1+y2+y3)/3

对于多边形



这样


HDU1115

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
struct centre
{
        double x , y ;
};
int cas , n ;
double Area( centre p0 , centre p1 , centre p2 )
{
       double area = 0 ;
       area =  p0.x * p1.y + p1.x * p2.y + p2.x * p0.y - p1.x * p0.y - p2.x * p1.y - p0.x * p2.y;
       return area / 2 ;  // 另外在求解的过程中,不需要考虑点的输入顺序是顺时针还是逆时针,相除后就抵消了。
}
int main ()
{
    centre p0 , p1 , p2 ;
    double sum_x , sum_y , sum_area , area;
    scanf ( "%d" , &cas ) ;
    while ( cas -- )
    {
          sum_x = sum_y = sum_area = 0 ;
          scanf ( "%d" , &n ) ;
          scanf ( "%lf%lf" , &p0.x , &p0.y ) ;
          scanf ( "%lf%lf" , &p1.x , &p1.y ) ;
          for ( int i = 2 ; i < n ; ++ i )
          {
              scanf ( "%lf%lf" , &p2.x , &p2.y ) ;
              area = Area(p0,p1,p2) ;
              sum_area += area ;
              sum_x += (p0.x + p1.x + p2.x) * area ;
              sum_y += (p0.y + p1.y + p2.y) * area ;
              p1 = p2 ;
          }
          printf ( "%.2lf %.2lf\n" , sum_x / sum_area / 3 , sum_y / sum_area / 3 ) ;
    }
    return 0 ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值