多边形重心问题
来源:互联网 发布:淘宝的pc是什么意思 编辑:程序博客网 时间:2024/05/21 08:39
多边形重心问题
- 描述
- 在某个多边形上,取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(多边形重心问题)
- 多边形重心问题
- acm-多边形重心问题
- 多边形重心问题
- 多边形重心问题
- 多边形重心问题
- 多边形重心问题
- 多边形重心问题
- 多边形重心问题
- 3 多边形重心问题
- NYOJ多边形重心问题
- NYOJ - 多边形重心问题
- 多边形重心问题
- 多边形重心问题
- 多边形重心问题
- 多边形重心问题 java
- nyoj3 多边形重心问题 【多边形面积+多边形重心】
- nyoj 3 多边形重心问题
- 南阳理工:多边形重心问题
- Android Studio 3.0全新时代:带来的一些新功能
- 微信支付签名错误
- 得分(Score,UVa1585)
- linux下vi命令大全
- 决策树、逻辑回归、线性回归使用时注意事项以及模型过拟合策略
- 多边形重心问题
- UnityShader入门精要学习笔记(九):基础纹理之渐变纹理与遮罩纹理
- C#学习笔记-struct关键字
- JSX语法详解,深度好文,mark
- java 方法
- Doxygen 配置使用教程 html/later/rtf/word/pdf
- 蘑菇街支付金融Android单元测试实践
- 浅谈数据库中的触发器
- php(5.6.30-ts-x86)及其他版本php扩展imagick安装,及支持curl扩展,及一般扩展安装方法