码迷,mamicode.com
首页 > 其他好文 > 详细

任意多边形的重心

时间:2014-05-26 04:04:18      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   c   code   java   

http://acm.hdu.edu.cn/showproblem.php?pid=1115

思路:转换为求三角形的重心。从第一个顶点出发,分别链接i,i+1形成三角形,分别求出每个三角形的面积,总面积之和为各部分之和。根据物理公式n个点的质量是mi,则重心是:X=(x1*m1+x2*m2+...xn*mn)/(m1+m2+...+mn);Y=(y1*m1+y2*m2+...yn*mn)/(m1+m2+...+mn);三角形的重心是x=(x1+x2+x3)/3,y=(y1+y2+y3)/3。

bubuko.com,布布扣
#include<stdio.h>
#include<string.h>
#include<math.h>
#define maxn 105
typedef struct
{
    double x,y;
}node;
double get_area(node a,node b,node c)
{
   return (a.x*b.y+c.x*a.y+b.x*c.y-c.x*b.y-b.x*a.y-a.x*c.y)/2;
}
int main()
{
    //freopen("in.txt","r",stdin);
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        node a,b,c;
        scanf("%lf%lf",&a.x,&a.y);
        scanf("%lf%lf",&b.x,&b.y);
        double X=0,Y=0;
        double Area=0,area;
        for(int i=2;i<n;i++)
        {
            scanf("%lf%lf",&c.x,&c.y);
            double x=a.x+b.x+c.x;
            double y=a.y+b.y+c.y;
            area=get_area(a,b,c);
            Area+=area;
            X+=x*area;
            Y+=y*area;
            b=c;
        }
        printf("%.2lf %.2lf\n",X/Area/3,Y/Area/3);
    }
    return 0;
}
bubuko.com,布布扣

 

任意多边形的重心,布布扣,bubuko.com

任意多边形的重心

标签:style   class   blog   c   code   java   

原文地址:http://www.cnblogs.com/lyf123456/p/3749296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!