博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NYOJ 3(多边形重心)
阅读量:6229 次
发布时间:2019-06-21

本文共 2161 字,大约阅读时间需要 7 分钟。

 

多边形重心问题

时间限制:
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.0000.500 1.000
//http://www.cnblogs.com/jbelial/archive/2011/08/08/2131165.html//实际上没必要用结构体 #include 
#include
#include
using namespace std;const int N = 10000;const double cmp = 1e-8;typedef struct Node{ double x,y;}Node;double area(double x1,double y1,double x2,double y2,double x3,double y3)//有向面积 {//判断三点是否共线:有向面积为0 return 1.0/2*((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1));} Node ch[N];int main(){ int i, j, T; scanf( "%d" , &T); while(T--) { int num;//既然是多边形,则num至少为3 memset(ch,0,sizeof(ch)); scanf("%d", &num); scanf( "%lf %lf",&ch[1].x, &ch[1].y); scanf( "%lf %lf",&ch[2].x, &ch[2].y); int i; double sum_x=ch[1].x,sum_y=ch[1].y,sum_area=0; double gx,gy;//每个三角形重心坐标 double sum_1x=0, sum_1y=0; for(i=3;i<=num;i++) { sum_x=ch[1].x,sum_y=ch[1].y;//必须在for内初始化 scanf( "%lf %lf",&ch[i].x, &ch[i].y); sum_x+=ch[i].x + ch[i-1].x; sum_y+=ch[i].y + ch[i-1].y; gx=sum_x/3.0; gy=sum_y/3.0; sum_area+=area(ch[1].x,ch[1].y,ch[i].x,ch[i].y,ch[i-1].x,ch[i-1].y); sum_1x+=gx*area(ch[1].x,ch[1].y,ch[i].x,ch[i].y,ch[i-1].x,ch[i-1].y);//横坐标分子 //sum_2x+=area(ch[1].x,ch[1].y,ch[i].x,ch[i].y,ch[i-1].x,ch[i-1].y);//横坐标分母 sum_1y+=gy*area(ch[1].x,ch[1].y,ch[i].x,ch[i].y,ch[i-1].x,ch[i-1].y);//纵坐标分子 //sum_2y+=area(ch[1].x,ch[1].y,ch[i].x,ch[i].y,ch[i-1].x,ch[i-1].y);//纵坐标分母 } double sum=0; if(sum_area!=0) sum=sum_1x/sum_area+sum_1y/sum_area; if(fabs(sum_area-cmp)==0) printf( "0.000 0.000\n"); else printf("%.3lf %.3lf\n",sum_area, sum); } return 0;}

 

你可能感兴趣的文章
SQL SERVER CHAR ( integer_expression )各版本返回值差异的案例
查看>>
pytest文档7-pytest-html生成html报告
查看>>
java中this的N种使用方法
查看>>
Windows IIS安装php
查看>>
mingw 设置python 设置git环境变量
查看>>
linux 系统下如何进行用户之间的切换
查看>>
Socket拆包和解包
查看>>
工作之忠、智、勇
查看>>
电子书下载:Beginning Nokia Apps Development: Using MeeGo, Mobile QT and OpenSymbian
查看>>
mysql 5.0存储过程学习总结
查看>>
matlab练习程序(Ritter‘s最小包围圆)
查看>>
SQL存储过程教程
查看>>
最详细的临时表,表变量的对比
查看>>
C#中直接打印Report文件(rdlc)
查看>>
引用计数
查看>>
C#:XML操作类 (转)
查看>>
struts2 API chm帮助文档生成介绍说明(转)
查看>>
数据字典统一管理,动态下拉框
查看>>
汽车常识全面介绍 - 引擎详论
查看>>
枚举类型、结构体和类的区别
查看>>