多边形重心问题

多边形重心问题

时间限制:3000 ms
 |  内存限制:65535 KB

难度:5


描述

在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接,
(第一个和最后一个连接),所有线段不和其他线段相交,但是可以重合,可得到一个多边形或一条线段或一个多边形和一个线段的连接后的图形; 
如果是一条线段,我们定义面积为0,重心坐标为(0,0).现在求给出的点集组成的图形的面积和重心横纵坐标的和;


输入

第一行有一个整数0<n<11,表示有n组数据;
每组数据第一行有一个整数m<10000,表示有这个多边形有m个顶点;

输出

输出每个多边形的面积、重心横纵坐标的和,小数点后保留三位;

样例输入

3
3
0 1
0 2
0 3
3
1 1
0 0
0 1
4
1 1
0 0
0 0.5
0 1

样例输出

0.000 0.000
0.500 1.000
0.500 1.000

#include<stdio.h>
#include<math.h>
struct point
{
    double x,y;
}p[10010];
double getarea(struct point p1,struct point p2)
{
    return p1.x*p2.y-p1.y*p2.x;
}
int main()
{
    int n,i,T;
    double x,y,s,temp;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%lf %lf",&p[i].x,&p[i].y);
        p[n]=p[0];
        for(i=0,s=x=y=0;i<n;i++)
        {
            temp=getarea(p[i],p[i+1])/2.0;//各个三角形的有向面积
            s+=temp;
            x+=temp*(p[i].x+p[i+1].x)/3.0;
            y+=temp*(p[i].y+p[i+1].y)/3.0;
        }
        if(fabs(s-0)<0.0000001)
            printf("0.000 0.000\n");
        else
            printf("%.3lf %.3lf\n",fabs(s),(x+y)/s);
    }
    return0;
}

多边形重心问题,布布扣,bubuko.com

时间: 2024-08-03 11:20:43

多边形重心问题的相关文章

谁能告诉我为什么sum_area输出总是0(多边形重心问题)

多边形重心问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以重合,可得到一个多边形或一条线段或一个多边形和一个线段的连接后的图形: 如果是一条线段,我们定义面积为0,重心坐标为(0,0).现在求给出的点集组成的图形的面积和重心横纵坐标的和: 输入 第一行有一个整数0<n<11,表示有n组数据:每组数据第一行有一个整数m&l

hdu1115(多边形重心算法)

题目意思: 给出一个n边形的n个顶点,求出这个n边形的重心坐标. http://acm.hdu.edu.cn/showproblem.php?pid=1115 题目分析: /** *出处:http://blog.csdn.net/ysc504/article/details/8812339 *①质量集中在顶点上 *  n个顶点坐标为(xi,yi),质量为mi,则重心 * X = ∑( xi×mi ) / ∑mi * Y = ∑( yi×mi ) / ∑mi * 特殊地,若每个点的质量相同,则 *

NYOJ3(多边形重心)

题目意思: 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以重合,可得到一个多边形或一条线段或一个多边形和一个线段的连接后的图形: 如果是一条线段,我们定义面积为0,重心坐标为(0,0).现在求给出的点集组成的图形的面积和重心横纵坐标的和. http://acm.nyist.net/JudgeOnline/problem.php?pid=3 输入 第一行有一个整数0<n<11,表示有n组数据: 每组数据

多边形重心模板

HDU 1115 Lifting the Stone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5719    Accepted Submission(s): 2391 Problem Description There are many secret openings in the floor which are covered

Hdu 3685 Rotational Painting(多边形重心+凸包)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3685 思路:先求出多边形重心,放置的边一定为凸包边.判断重心是否落在边之间(求点到直线与点到线段的距离,判断). 4 0 0 4 0 8 4 4 4 注意这种情况,重心不能在凸包边端点的垂线上. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using name

hdu1115 Lifting the Stone(几何,求多边形重心模板题)

题意:就是给你一个多边行的点的坐标,求此多边形的重心. 一道求多边形重心的模板题! #include<cstdio> #include<cmath> #include<cstring> using namespace std; struct point { double x,y; }PP[1000047]; point bcenter(point pnt[],int n){ point p,s; double tp,area = 0, tpx=0, tpy=0; p.x

hdu 3685 多边形重心+凸包

Rotational Painting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2498    Accepted Submission(s): 702 Problem Description Josh Lyman is a gifted painter. One of his great works is a glass pain

hdu3685 Rotational Painting 求多边形重心和凸包

http://acm.hdu.edu.cn/showproblem.php?pid=3685 Rotational Painting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2614    Accepted Submission(s): 737 Problem Description Josh Lyman is a gifted

hdu 1115(计算多边形重心)

题意:已知一多边形没有边相交,质量分布均匀.顺序给出多边形的顶点坐标,求其重心. 分析: 求多边形重心的题目大致有这么几种: 1,质量集中在顶点上.n个顶点坐标为(xi,yi),质量为mi,则重心 X = ∑( xi×mi ) / ∑mi Y = ∑( yi×mi ) / ∑mi 特殊地,若每个点的质量相同,则 X = ∑xi / n Y = ∑yi / n 2,质量分布均匀.这个题就是这一类型,算法和上面的不同. 特殊地,质量均匀的三角形重心: X = ( x0 + x1 + x2 ) / 3