Time Limit: 2000/1000 MS
(Java/Others) Memory Limit: 65536/32768 K
(Java/Others)
Total Submission(s): 4819 Accepted
Submission(s): 2006
1 #include <iostream>
2 #include <iomanip>
3 using namespace std;
4 struct point { double x, y; };
5 point bcenter(point pnt[], int n){
6 point p, s;
7 double tp, area = 0, tpx = 0, tpy = 0;
8 p.x = pnt[0].x; p.y = pnt[0].y;
9 for (int i = 1; i <= n; ++i) { // point: 0 ~ n-1
10 s.x = pnt[(i == n) ? 0 : i].x;
11 s.y = pnt[(i == n) ? 0 : i].y;
12 tp = (p.x * s.y - s.x * p.y); area += tp / 2;
13 tpx += (p.x + s.x) * tp; tpy += (p.y + s.y) * tp;
14 p.x = s.x; p.y = s.y;
15 }
16 s.x = tpx / (6 * area); s.y = tpy / (6 * area);
17 return s;
18 }
19 point P[1000000];
20 int main()
21 {
22 int T,N;
23 cin>>T;
24 cout<<setiosflags(ios::fixed)<<setprecision(2);
25 while(T--){
26 cin>>N;
27 for(int i=0;i<N;i++) //从0开始输入多边形的n个点
28 cin>>P[i].x>>P[i].y;
29 point t = bcenter(P,N); //返回重心坐标
30 cout<<t.x<<‘ ‘<<t.y<<endl;
31 }
32 return 0;
33 }
Freecode : www.cnblogs.com/yym2013
hdu 1115:Lifting the Stone(计算几何,求多边形重心。 过年好!)
原文:http://www.cnblogs.com/yym2013/p/3537141.html