hdu 1115 Lifting the Stone(凸多邊形重心的應用)

題目鏈接:

題目大意:輸入一個n邊形的n個點的座標,要求你求出這個多邊形的重心

代碼如下:

#include<iostream>
#include<stdlib.h>
using namespace std;
const int maxn=1000005;
typedef struct point
{
	double x;
	double y;
	point(double a=0,double b=0):x(a),y(b){}
	double operator *(point b)
	{
		return x*b.y-y*b.x;//表示這兩個點的叉乘,即這兩個點與原點所圍成的三角形的面積的兩倍,由於採用叉乘的方式,所以有可能爲負,所以可將該多邊形的外面部分的面積減去
	}
}P;
int n;
P p[maxn];
double cen_x,cen_y;
void centerGra()
{
	double area=0;
	for(int i=0;i<n;i++)
	{
		int j=(i+1)%n;
		area+=p[i]*p[j];//計算多邊形的面積,質量分佈均勻,則可將其面積看作質量
		cen_x+=(p[i].x+p[j].x)*(p[i]*p[j]);//計算多邊形重心的橫座標
		cen_y+=(p[i].y+p[j].y)*(p[i]*p[j]);//計算多邊形重心的縱座標
	}
	area/=2.0;
	cen_x=cen_x/(6.0*area);
	cen_y=cen_y/(6.0*area);
}
int main(void)
{
	int cas,i;
	cin>>cas;
	while(cas--)
	{
		cen_x=cen_y=0;
		cin>>n;
		for(i=0;i<n;i++)
			cin>>p[i].x>>p[i].y;
		centerGra();
		printf("%.2lf %.2lf\n",cen_x,cen_y);
	}
	system("Pause");
	return 0;
}


 

 

發佈了35 篇原創文章 · 獲贊 23 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章