求多边形重心(整理)

   三角形ABC,坐标分别为A(x1, y1), B(x2, y2), C(x3, y3)

 

   三角形重心坐标

   x = (x1+x2+x3)/3, y = (y1+y2+y3)/3

 

   利用行列式计算三角形面积:

   

   三阶行列式的计算

 

   

     或者用

   S = ((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/2.0计算三角形面积

   由三角形推广到n边形的重心计算公式

   

   

     HUD 1115 Lifting the Stone

   

#include <iostream>
#include <cstdio>
using namespace std;
struct Point
{
    double x, y;
};
int main()
{
    int num, n, i;
    Point p0, p1, p2;
    double sum_x, sum_y, sum, tmp;
    scanf("%d", &num);
    while (num--)
    {
        scanf("%d", &n);
        sum = sum_x = sum_y = 0.0;
        scanf("%lf%lf", &p0.x, &p0.y);
        scanf("%lf%lf", &p1.x, &p1.y);
        for (i=2; i<n; i++)
        {
            scanf("%lf%lf", &p2.x, &p2.y);
            tmp = ((p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y))/2.0;
            sum += tmp;
            sum_x += ((p0.x+p1.x+p2.x) * tmp);
            sum_y += ((p0.y+p1.y+p2.y) * tmp);
            p1.x = p2.x;
            p1.y = p2.y;
        }
        printf("%.2lf %.2lf\n", sum_x/sum/3, sum_y/sum/3);
    }
    return 0;
}

   整理地址:  

   http://wenku.baidu.com/link?url=MHthNOz5wtyjAcL5mecWHtZGavBGurNpxszozAt7rISqcyfqr3F5ZoJJze40Tic0s0VPI2aWQNuyfMmZTVvLG1mflbb50_-r146V3we-YLG

   http://wenku.baidu.com/link?url=RPdB_BfkpoPX4BDQ5AvBUTt3uTM1qcLAFE2TH4vuz8WLBgdzbMG0BPYsSj1HGg52eGxz4ASVYyb43TfTt5DIl5SMCIuSd1UZ9735y94FGum

   

 

 



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值