题意:就是让你找出多边形的重心。
难点:怎么算?数学学的不好,计算几何就更不用说了,百度一下当做学习了。
我们可以将多边形分成n个三角形,通过叉积算出三角形的面积,在根据三角形的周长除去3再乘以面积就是三角形的坐标了。
详情请参考:http://www.cnblogs.com/jbelial/archive/2011/08/08/2131165.html
代码:
#include<stdio.h>
#include<math.h>
#define MAXN 10005
struct node{
double x, y;
}s[MAXN];
double area(node p1, node p2, node p3)
{
return (p1.x-p2.x)*(p3.y-p2.y) - (p3.x-p2.x)*(p1.y-p2.y);
}
int main()
{
int t, n, i, j;
scanf("%d", &t);
while(t --){
scanf("%d", &n);
for(i = 0; i < n; i ++){
scanf("%lf%lf", &s[i].x, &s[i].y);
}
double sum_x, sum_y, sum_area, temp;
sum_x = sum_y= sum_area = 0;
for(i = 1; i < n-1; i ++){
temp = (-1)*area(s[0], s[i], s[i+1])/2;
sum_x += temp*(s[0].x+s[i].x+s[i+1].x)/3;
sum_y+=temp*(s[0].y+s[i].y+s[i+1].y)/3;
sum_area += temp;
}
printf("%.2lf %.2lf\n", sum_x/sum_area, sum_y/sum_area);
}
return 0;
}
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1115