多边形重心问题

来源:互联网 发布:淘宝的pc是什么意思 编辑:程序博客网 时间:2024/05/21 08:39

多边形重心问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:5
描述
在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以重合,可得到一个多边形或一条线段或一个多边形和一个线段的连接后的图形; 
如果是一条线段,我们定义面积为0,重心坐标为(0,0).现在求给出的点集组成的图形的面积和重心横纵坐标的和;
输入
第一行有一个整数0<n<11,表示有n组数据;
每组数据第一行有一个整数m<10000,表示有这个多边形有m个顶点;
输出
输出每个多边形的面积、重心横纵坐标的和,小数点后保留三位;
样例输入
330 10 20 331 10 00 141 10 00 0.50 1
样例输出
0.000 0.0000.500 1.000

0.500 1.000

代码实现:

#include<iostream>
#include<vector>
#include<cmath>
#include<iomanip>
using namespace std;
struct point
{
double x;
double y;
};


int main()
{
int n,m;
cin>>n;
while(n--)
{
double area=0;
point center={0,0}; 
cin>>m;
vector<point> points;
while(m--)
{
point p;
cin>>p.x;
cin>>p.y;
//push_back()尾部插入字符 
points.push_back(p);

int i=0;
double temp=0;
for(;i<points.size()-1;i++)
{
//多边形的面积公式 
temp=(points[i].x*points[i+1].y-points[i+1].x*points[i].y);
area+=temp/2;
center.x+=temp*(points[i].x+points[i+1].x);
center.y+=temp*(points[i].y+points[i+1].y);
}
temp=(points[i].x*points[0].y-points[0].x*points[i].y);
area+=temp/2;
center.x+=temp*(points[i].x+points[0].x);
center.y+=temp*(points[i].y+points[0].y);

center.x/=6*area;
center.y/=6*area;

double sum=center.x+center.y;
//area 
cout<<setprecision(3)<<std::fixed<<fabs(area)<<" ";
//sum
if(sum==sum)
cout<<setprecision(3)<<std::fixed<<sum<<endl;
else
cout<<"0.000"<<endl;

}
return 0;
}

其中涉及到(1)多边形面积计算公式:如果点的顺序为(x1,y1)(x2,y2)……(xn,yn)
     则:s=0.5*abs(x1*y2-y1*x2+x2*y3-y2*x3+……+xn*y1-y1*xn)
    (2)多边形重心:最简单方法:x=(x1+x2+……+xn)/n;  y=(y1+y2+……+yn)/n;  则其坐标为(x,y)
    涉及到数学理论,数学积分,不太懂,百度上面有文献资料:1)多边形面积计算公式:如果点的顺序为(x1,y1)(x2,y2)……(xn,yn)
     则:s=0.5*abs(x1*y2-y1*x2+x2*y3-y2*x3+……+xn*y1-y1*xn)
    (2)多边形重心:最简单方法:x=(x1+x2+……+xn)/n;  y=(y1+y2+……+yn)/n;  则其坐标为(x,y)
    涉及到数学理论,数学积分,不太懂。链接:

1)多边形面积计算公式:如果点的顺序为(x1,y1)(x2,y2)……(xn,yn)
     则:s=0.5*abs(x1*y2-y1*x2+x2*y3-y2*x3+……+xn*y1-y1*xn)
    (2)多边形重心:最简单方法:x=(x1+x2+……+xn)/n;  y=(y1+y2+……+yn)/n;  则其坐标为(x,y)
    涉及到数学理论,数学积分,不太懂

https://wenku.baidu.com/view/c80aac7658fb770bf78a5593.htm(多边形重心问题)

原创粉丝点击