zoukankan      html  css  js  c++  java
  • hdu 1115 求多边形重心

    //求多边形的重心算法
    //说明:
    //求多边形重心并不是简单的把求三角形的重心公式推广就行了
    //我的算法是在平面上取一点(一般取原点, 这样可以减少很多计算, 而且使思路更清晰^_^)
    //这样就得到了N个三角形OP[i]P[i+1](其中点的顺序要为逆时针的),
    //分别求出这N个三角形的重心Ci和面积Ai(注意此处面积是又向面积, 就是用叉乘求面积时保留其正负号)
    //在求出A = A1+A2+...+AN(同样保留正负号的代数相加)
    //最终重心C = sigma(Ai+Ci)/A;

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    
    struct point
    {
    double x;
    double y;
    }pi[1000010];
    
    //求多边形的重心算法
    //说明:
    //求多边形重心并不是简单的把求三角形的重心公式推广就行了
    //我的算法是在平面上取一点(一般取原点, 这样可以减少很多计算, 而且使思路更清晰^_^)
    //这样就得到了N个三角形OP[i]P[i+1](其中点的顺序要为逆时针的),
    //分别求出这N个三角形的重心Ci和面积Ai(注意此处面积是又向面积, 就是用叉乘求面积时保留其正负号)
    //在求出A = A1+A2+...+AN(同样保留正负号的代数相加)
    //最终重心C = sigma(Ai+Ci)/A;
    point gravity(point *p, int n)
    {
    double area = 0;
    point center;
    center.x = 0;
    center.y = 0;
    
    for (int i = 0; i < n-1; i++)
    {
       area += (p[i].x*p[i+1].y - p[i+1].x*p[i].y)/2;
       center.x += (p[i].x*p[i+1].y - p[i+1].x*p[i].y) * (p[i].x + p[i+1].x);
       center.y += (p[i].x*p[i+1].y - p[i+1].x*p[i].y) * (p[i].y + p[i+1].y);
    }
    
    area += (p[n-1].x*p[0].y - p[0].x*p[n-1].y)/2;
    center.x += (p[n-1].x*p[0].y - p[0].x*p[n-1].y) * (p[n-1].x + p[0].x);
    center.y += (p[n-1].x*p[0].y - p[0].x*p[n-1].y) * (p[n-1].y + p[0].y);
    
    center.x /= 6*area;
    center.y /= 6*area;
    
    return center;
    }
    
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while(t--)
    	{
    		int n;
    		scanf("%d",&n);
    		for(int i=0;i<n;i++)
    			scanf("%lf %lf",&pi[i].x,&pi[i].y);
    		point out=gravity(pi,n);
    		printf("%.2f %.2f\n",out.x,out.y);
    	}
    	return 0;
    }
    
  • 相关阅读:
    百度mp3地址解密码
    VB 在EXE后附加信息
    截屏函数
    Base64和StrToByte
    The Android ION memory allocator, DMABUF is mentioned as well
    DDC EDID 介绍
    Memory management for graphic processors TTM的由来
    科普 写display driver的必看 How video card works [2D的四种主要操作]
    GEM vs TTM
    DMABUF 背景介绍文章 Sharing buffers between devices
  • 原文地址:https://www.cnblogs.com/nanke/p/2121046.html
Copyright © 2011-2022 走看看