zoukankan      html  css  js  c++  java
  • poj 1385Lifting the Stone解题报告

    任意质量分布均匀的多边形的重心位置,可以假定其单位面积质量为1,则面积即可表示质量,而对于质量分布均匀的多边形的重心,需要先以任意一个顶点为参考点,把多边形分为多个三角形,分别求这些三角形的重心位置,此时多边形的质量全在每个三角形的重心上了,即在顶点上,此时,就可以使用gx=Σ(xi*areai)/Σ(areai),gy=Σ(yi*areai)/Σ(areai)期中xi,yi为第i个三角形的中心位置,areai为第i个三角形的面积

    View Code
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #define N 1000005
     5 using namespace std;
     6 struct point
     7 {
     8     double x,y;
     9 };
    10 point p[N];
    11 double cross(point p1,point p2,point p3)
    12 {
    13     return (p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x);
    14 }
    15 int main()
    16 {
    17     int t;
    18     int i,j,k,n;
    19     double area,sum,gx,gy,x1,y1;
    20     scanf("%d",&t);
    21     while(t--)
    22     {
    23         scanf("%d",&n);
    24         for(i=0;i<n;i++)
    25         scanf("%lf%lf",&p[i].x,&p[i].y);
    26         gx=gy=sum=0.0;
    27         for(i=1;i<n-1;i++)
    28         {
    29             area=cross(p[0],p[i],p[i+1]);
    30             sum+=area;
    31             x1=(p[0].x+p[i].x+p[i+1].x);
    32             y1=(p[0].y+p[i].y+p[i+1].y);
    33             gx+=(x1*area);
    34             gy+=(y1*area);
    35         }
    36         gx/=(sum*3);
    37         gy/=(sum*3);
    38         printf("%0.2lf %0.2lf\n",gx,gy);
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    第八周学习进度
    《梦断代码》阅读笔记01
    冲刺记录一
    NABCD简介
    第七周学习进度
    《编程珠玑》阅读笔记03
    第六周学习进度
    数据库数据定期同步实现
    数据库之间的数据同步
    数据同步——otter
  • 原文地址:https://www.cnblogs.com/caozhenhai/p/2538951.html
Copyright © 2011-2022 走看看