ACM求多边形重心和面积问题
描述
如果是一条线段,我们定义面积为0,重心坐标为(0,0).现在求给出的点集组成的图形的面积和重心横纵坐标的和;
- 输入
-
第一行有一个整数0<n<11,表示有n组数据;
每组数据第一行有一个整数m<10000,表示有这个多边形有m个顶点; - 输出
- 输出每个多边形的面积、重心横纵坐标的和,小数点后保留三位;
- 样例输入
3
3
0 1
0 2
0 3
3
1 1
0 0
0 1
4
1 1
0 0
0 0.5
0 1
样例输出
0.000 0.000
0.500 1.000
0.500 1.000
原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=3
思路:
求多边形面积:将n边形分割为n-2个三角形,分别求三角形面积,又因为已知顶点坐标,所以可以根据向量来求,原点到
某顶点的确定的向量就是这个顶点的坐标,设顶点为 p1, p2, ..., pk, 则面积s
具体证明见链接:http://blog.csdn.net/hemmingway/article/details/7814494
对于重心, 设每个三角形面积为st, 对应向量为(x1, y1), (x2, y2), 那么x方向:(x1+x2)/3, y方向: (y1+y2)/3,假设总面积为s, 那么每个三角形权重为st/s, 那么
重心坐标为各个三角形重心乘以其面积求和后除以s,
具体证明见链接:http://blog.sina.com.cn/s/blog_6bc4930c01011xcd.html
代码:
#include<stdio.h>
#include<math.h>
#define M 10010
#define INF 0.0001
typedef struct Node
{double x;double y;
}Node;int main()
{Node m[M];int T, t;double temp, s, gra_x, gra_y; scanf("%d", &T);while(T--){ s = 0.0; gra_x = 0.0; gra_y = 0.0;scanf("%d", &t);for(int i = 0; i < t; i++){scanf("%lf%lf", &m[i].x, &m[i].y);}for(int i = 1; i <= t; i++){temp = (m[i%t].x*m[i-1].y - m[i%t].y*m[i-1].x)/2.0;s += temp;gra_x += temp*(m[i%t].x + m[i-1].x)/3.0;gra_y += temp*(m[i%t].y + m[i-1].y)/3.0;} if(s > -INF && s < INF){printf("0.000 0.000\n"); continue;}printf("%0.3f %0.3f\n", s, (gra_x+gra_y)/s); } return 0;
}
ACM求多边形重心和面积问题相关推荐
- HDU 1115 Lifting the Stone(求多边形重心)
HDU 1115 大意:给你个n,有n个点,然后给你n个点的坐标,求这n个点形成的多边形的重心的坐标. 1 struct point 2 { 3 double x, y; 4 } P[1000010] ...
- POJ1279(求多边形内核的面积)
题目:Art Gallery 先求出内核,然后再求多边形的面积就行. /* Goujinping 2013.4.12 NEFU The masterplate of Polygon kernel. N ...
- HDOJ(1115)多边形重心
Lifting the Stone http://acm.hdu.edu.cn/showproblem.php?pid=1115 题目描述:输入n个顶点(整数),求它们围成的多边形的重心. 算法:以一 ...
- hdu 1115(多边形重心)
求多边形重心的题目大致有这么几种: 1.质量集中在顶点上 n个顶点坐标为(xi,yi),质量为mi,则重心 X = ∑( xi×mi ) / ∑mi Y = ∑( yi×mi ) / ...
- 南阳 3 多边形重心问题(数学几何)
多边形重心问题 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接), ...
- HDU 2036 改革春风吹满地(求多边形面积)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2036 改革春风吹满地 ...
- 三角剖分求多边形面积的交 HDU3060
1 //三角剖分求多边形面积的交 HDU3060 2 3 #include <iostream> 4 #include <cstdio> 5 #include <cstr ...
- 使用行列式公式求多边形面积
namespace SKJZ {namespace lib{public struct Point { public float x, y;}public class Polygon{/// < ...
- 给定点坐标求多边形面积模板
给定点坐标求多边形面积模板 方法:利用向量叉积求三角形面积的方法,把多边形分割成若干个三角形,然后求和得到多边形面积,计算时需要注意,给定的点的顺序必须是逆时针或者顺时针. 逆时针的方向是叉积的正方向 ...
最新文章
- 鸟哥的Linux私房菜基础学习篇(第二版)第十二章课后习题与答案
- pandas将df赋值到另一个df_Python pandas将多级列标题df映射到另一个df
- 第五章 使用 Bootstrap Typeahead 组件(百度下拉效果)
- TTS技术简单介绍和Ekho(余音)TTS的安装与编程
- 【BZOJ1012】最大数maxnumber,疯狂CE的线段树练习
- Centos7的 git: 未找到命令解决方法
- android便签的作用,安卓手机中的便签有什么用?
- php操作mysql常用_PHP常用MySql操作
- 如何用“云崽(Yunzai)”搭建一个原神群机器人(转载)
- SAP SD pricing condition技术在系统里的一些练习
- 使得在虚拟机能复制粘贴 -- Linux安装增强
- multisim 9013、8050免费下载
- GPIO 模拟SPI
- 《Linux管理与应用》课程考核方案
- 华为在线笔试题-python
- 券商Robinhood大量客户被最低价格强平-交易成本拉大500倍,游戏驿站GME只能平仓不能开仓-看看行政总裁Vlad Tenev是如何回复这些问题的?
- 详解C语言实现植物大战僵尸阳光9999
- Android 中的“后台无效动画“行为分析
- 信息系统规划工具中的各种矩阵
- Flarum部署:从源码到docker到放弃