本文主要是介绍HDOJ 1115 Lifting the Stone 【计算几何】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:就是让你找出多边形的重心。
难点:怎么算?数学学的不好,计算几何就更不用说了,百度一下当做学习了。
我们可以将多边形分成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
这篇关于HDOJ 1115 Lifting the Stone 【计算几何】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!