hdu1115(计算多边形几何重心)
2016-10-21 12:51
337 查看
题目链接: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:直接分别求所有点的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 }
相关文章推荐
- NYOJ3—多边形重心问题(计算几何)&&hdu1115 Lifting the Stone
- 求多边形重心(计算几何)
- HDOJ 1115 Lifting the Stone (计算几何+多边形重心)
- hdu 1115:Lifting the Stone(计算几何,求多边形重心。 过年好!)
- HDU 1115 Lifting the Stone 计算几何(多边形找重心)
- 计算几何-多边形的重心(转载)
- 计算几何-多边形的重心
- 计算几何-多边形的重心
- 【计算几何初步:多边形中心】【HDU1115】Lifting the Stone
- 【计算几何初步:多边形中心】【HDU1115】Lifting the Stone
- Lifting the Stone 计算几何 多边形求重心
- nyoj 3:多边形重心问题(计算几何)
- 多边形重心问题_nyoj_3(计算几何).java
- NYOJ-3 多边形重心问题【计算几何】
- 计算几何-多边形的重心
- hdu1115 Lifting the Stone(几何,求多边形重心模板题)
- 计算几何-多边形的重心
- 南阳理工 题目3:多边形重心问题(计算几何,求多边形面积+重心)
- 计算几何-多边形的重心
- 三维计算几何模板--表面三角形个数 表面多边形个数 三维凸包 表面积 凸包重心 点到面的距离