HDU 1115 求多边形重心

简介:

一个均匀的多边形重心为 横纵坐标和分别除以六倍的面积。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
using namespace std;
struct point
{
    double x,y;
    void input()
    {
        scanf("%lf%lf",&x,&y);
    }
    void print()
    {
        printf("%.2f %.2f\n",x,y);
    }
};
double cross(point i,point j,point k)
{
    return (j.x-i.x)*(k.y-i.y)-(k.x-i.x)*(j.y-i.y);
}
point Gravity(point p[],int n)
{
    point O,t;
    O.x = O.y = 0;
    t.x = t.y = 0;
    p[n] = p[0];
    double A = 0;
    for(int i=0; i<n; i++)
        A += cross(O,p[i],p[i+1]);
    A /= 2.0;
    for(int i=0; i<n; i++)
    {
        t.x += (p[i].x + p[i+1].x) * cross(O,p[i],p[i+1]);
        t.y += (p[i].y + p[i+1].y) * cross(O,p[i],p[i+1]);
    }
    t.x /= 6*A;
    t.y /= 6*A;
    return t;
}
point data[1000005];
int main()
{
    int t;
    int n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=0; i<n; i++)data[i].input();
        point t=Gravity(data,n);
        t.print();
    }
    return 0;
}


目录
打赏
0
0
0
0
1
分享
相关文章
【计算机图形学】期末复习Bezier曲线与曲面篇
【计算机图形学】期末复习Bezier曲线与曲面篇
C++/PTA CCircle圆类求圆环面积
定义一个名为CCircle的圆类,要求: 1.其属性数据为圆的半径radius; 2.定义构造函数; 3.成员函数area()计算圆的面积。 4.编写主函数计算一个内径和外径分别为a和b的圆环的面积,其中a和b由键盘输入,π取值为3.14159。
280 0
洛谷P3194 [HNOI2008]水平可见直线(计算几何+单调栈)
洛谷P3194 [HNOI2008]水平可见直线(计算几何+单调栈)
128 0
洛谷P3194 [HNOI2008]水平可见直线(计算几何+单调栈)
HDU7018.Banzhuan(计算几何+贪心)
HDU7018.Banzhuan(计算几何+贪心)
128 0
HDU7018.Banzhuan(计算几何+贪心)
AcWing 604. 圆的面积
AcWing 604. 圆的面积
96 0
AcWing 604. 圆的面积
用并查集解决「岛屿最大面积问题」
用并查集解决这个问题时间花费会比 DFS 和 BFS 更大,但是最主要的还是学习并查集的思想以及如何实现。
146 0
HDOJ(HDU) 2091 空心三角形
HDOJ(HDU) 2091 空心三角形
192 0
洛谷 P1318 积水面积
题目描述 一组正整数,分别表示由正方体迭起的柱子的高度。若某高度值为x,表示由x个正立方的方块迭起(如下图,0
1091 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等