zoukankan      html  css  js  c++  java
  • 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
    ", sumx/sumarea/3, sumy/sumarea/3);
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    iOS开发UI篇—Modal简单介绍
    iOS开发UI篇—APP主流UI框架结构
    A1081. Rational Sum
    A1049. Counting Ones
    A1008. Elevator
    A1104. Sum of Number Segments
    B1003. 我要通过!
    二分查找、two points、排序
    A1069. The Black Hole of Numbers
    A1101. Quick Sort
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/5984215.html
Copyright © 2011-2022 走看看