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。
#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;
}
时间: 2024-10-15 10:59:55