zoukankan      html  css  js  c++  java
  • HDU 1115 Lifting the Stone

    题解:计算几何求多边形的重心,该多边形质量分布均匀,质量分布均匀。

      特殊地,质量均匀的三角形重心:
      X = (x0+x1+x2) / 3
      Y = (y0+y1+y2) / 3
    将多边形划分为若干个三角形。
    若我们求出了每个三角形的重心和质量,可以构造一个新的多边形,顶点为所有三角形的重心,顶点质量为三角形的质量。由于三角形的面积与质量成正比,所以我们这里用面积代替质量来计算。多边形有可能为凹多边形,三角形有可能在多边形之外。如何处理这种情况呢?很简单,我们使用叉积来计算三角形面积,当三角形在多边形之外时,得到“负面积”就抵消掉了。

    所以,把每个三角形看作一个质量为面积的点,然后求出这个三角形X坐标平均值,相乘后得到这个点。将所有点同样处理后相加,最终结果除以多边形面积就是多边形重心的X坐标。Y同理求得。

    #include <cstdio>
    int x,y,x0,y0,x1,y1,x2,y2;
    int main(  ){
        int t; scanf("%d",&t);
        while(t--){
           double A=0,X=0,Y=0,s; int n;
           scanf("%d",&n);
           scanf("%d%d%d%d",&x0,&y0,&x1,&y1);
           for(int i=2;i<n;i++){
              scanf("%d%d",&x2,&y2);
              x=x0+x1+x2; y=y0+y1+y2;
              s=(x2-x0)*(y1-y0)-(x1-x0)*(y2-y0);
              A+=s; X+=s*x; Y+=s*y;
              x1=x2,y1=y2;
            }
            printf("%.2lf %.2lf
    ",X/A/3,Y/A/3);
        }
        return 0;
    }
    
  • 相关阅读:
    CMS 阶段性了结
    Java 代码监控 JVM 运行状态 —— 记一次 JVM 调优的毛招
    ClassLoader PPT 总结
    记一次 CMS 回收异常问题 —— 跨代引用和循环依赖
    读懂 GC 日志
    ClassLoader 学习笔记
    java 可见性简单总结
    Kafka 基本原理整理
    秒杀系统个人总结
    centos 7 mongodb4.0 安装配置
  • 原文地址:https://www.cnblogs.com/forever97/p/3635181.html
Copyright © 2011-2022 走看看