zoukankan      html  css  js  c++  java
  • HDU 1115 Lifting the Stone(求多边形重心)

    HDU 1115

    大意:给你个n,有n个点,然后给你n个点的坐标,求这n个点形成的多边形的重心的坐标。

     1 struct point
     2 {
     3     double x, y;
     4 } P[1000010];
     5 
     6 struct line
     7 {
     8     point a, b;
     9 } ;
    10 
    11 double xmult(point p1, point p2, point p)
    12 {
    13     return (p1.x-p.x)*(p2.y-p.y) - (p2.x-p.x)*(p1.y-p.y);
    14 }
    15 
    16 point intersection(line u,line v){
    17     point ret=u.a;
    18     double t=((u.a.x-v.a.x)*(v.a.y-v.b.y)-(u.a.y-v.a.y)*(v.a.x-v.b.x))
    19             /((u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x));
    20     ret.x+=(u.b.x-u.a.x)*t;
    21     ret.y+=(u.b.y-u.a.y)*t;
    22     return ret;
    23 }
    24 
    25 point barycenter(point a,point b,point c){
    26     line u,v;
    27     u.a.x=(a.x+b.x)/2;
    28     u.a.y=(a.y+b.y)/2;
    29     u.b=c;
    30     v.a.x=(a.x+c.x)/2;
    31     v.a.y=(a.y+c.y)/2;
    32     v.b=b;
    33     return intersection(u,v);
    34 }
    35 
    36 ///多边形重心
    37 point Barycenter(int n,point* p){
    38     point ret,t;
    39     double t1=0,t2;
    40     int i;
    41     ret.x=ret.y=0;
    42     for (i=1;i<n-1;i++)
    43         if (fabs(t2=xmult(p[0],p[i],p[i+1]))>eps){
    44             t=barycenter(p[0],p[i],p[i+1]);
    45             ret.x+=t.x*t2;
    46             ret.y+=t.y*t2;
    47             t1+=t2;
    48         }
    49     if (fabs(t1)>eps)
    50         ret.x/=t1,ret.y/=t1;
    51     return ret;
    52 }
    53 
    54 int T;
    55 int n;
    56 
    57 void Solve()
    58 {
    59     scanf("%d", &T);
    60     while(T--)
    61     {
    62         scanf("%d", &n);
    63         for(int i = 0; i < n; ++i)
    64         {
    65             scanf("%lf%lf", &P[i].x, &P[i].y);
    66         }
    67         point t = Barycenter(n, &P[0]);
    68         printf("%.2lf %.2lf
    ", t.x+eps, t.y+eps);
    69     }
    70 }
    HDU 1115
  • 相关阅读:
    错误提示窗口-“操作系统当前的配置不能运行此应用程序”
    打印机无法打印的10种解决方法
    开发进度三
    人月神话阅读笔记二
    开发进度二
    开发进度1
    人月神话阅读笔记一
    库存物资管理系统
    四则运算
    动手动脑5
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3680271.html
Copyright © 2011-2022 走看看