hdu1115(计算多边形几何重心)

Posted ygeloutingyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1115(计算多边形几何重心)相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1115

 

题意:给出一些点,求这些点围成的多边形的重心;

 

思路:

方法1:直接分别求所有点的x坐标的平均值和y坐标的平均值,即答案;不过这个方法的计算精度不是很高,要求高精度时用另一个方法;

 

方法2:

用公式:x = (xi*si*+...xn*sn)/(si+...+sn); y = (yi*si*+...yn*sn)/(si+...+sn);

 

方法2的代码:

 1 #include <iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 
 5 struct gg{
 6     double x, y;
 7 };
 8 
 9 double get_area(gg a, gg b, gg c){ //***用行列式计算三角形面积
10     double area = a.x*b.y + a.y*c.x + b.x*c.y - c.x*b.y - b.x*a.y - a.x*c.y;
11     return area;
12 }
13 
14 int main(void){
15     int t;
16     scanf("%d", &t);
17     while(t--){
18         int n;
19         scanf("%d", &n);
20         gg p0, p1, p2;
21         double sumx=0, sumy=0, sumarea=0;
22         scanf("%lf%lf", &p0.x, &p0.y);
23         scanf("%lf%lf", &p1.x, &p1.y);
24         for(int i=2; i<n; i++){
25             scanf("%lf%lf", &p2.x, &p2.y);
26             double area = get_area(p0, p1, p2);
27             sumarea += area;
28             sumx += (p0.x+p1.x+p2.x)*area;
29             sumy += (p0.y+p1.y+p2.y)*area;
30             p1 = p2;
31         }
32         // cout << sumx << " " << sumy << " " << sumarea << endl;
33         printf("%.2lf %.2lf\n", sumx/sumarea/3, sumy/sumarea/3);
34     }
35     return 0;
36 }

 

以上是关于hdu1115(计算多边形几何重心)的主要内容,如果未能解决你的问题,请参考以下文章

hdu-1115(计算多边形重心)

hdu1115多边形求重心模板

HDU 1115(求质量均匀分布的多边形重心 物理)

POJ 1385 计算几何 多边形重心

POJ 3855 计算几何·多边形重心

*HDU 1115 计算几何