nyoj 3 多边形重心问题
描述
在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以重合,可得到一个多边形或一条线段或一个多边形和一个线段的连接后的图形;
如果是一条线段,我们定义面积为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
计算多边形的面积可已将多边形分为多个三角形,求所有三角形面积的和就是多边形的面积。求三角形面积用叉积公式求。(所有三角形面积的计算表达式的展开会消去相同的项,然后就两个点表示就可以了)。
求多边形的重心坐标道理一样,求每个三角形的重心坐标,乘以各三角形的面积作为权重的和,再除以多边形的面积就是多边形的重心坐标。
#include<cstdio>
#include<cmath>
#define MAXN 55000
#define INF 0.0000001
struct point
{double x,y;point():x(0),y(0){}///构造函数,初始化值列表
} a[MAXN];
int main()
{int n,i,t;scanf("%d",&t);while(t--){double sum=0;point wight;scanf("%d",&n);for(i=0; i<n; i++)scanf("%lf%lf",&a[i].x,&a[i].y);for(i=1; i<=n; i++){double tem=(a[i%n].x*a[i-1].y-a[i-1].x*a[i%n].y)/2.0;sum+=tem;wight.x+=tem*(a[i%n].x+a[i-1].x)/3.0;///构造函数是为wight.x,wight.y初始化wight.y+=tem*(a[i%n].y+a[i-1].y)/3.0;}if(fabs(sum-0)<INF)puts("0.000 0.000");elseprintf("%.3lf %.3lf\n",fabs(sum),(wight.x+wight.y)/sum);///面积一定是正的}return 0;
}
nyoj 3 多边形重心问题相关推荐
- NYOJ 3:多边形重心问题
多边形重心问题 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接), ...
- POJ 3855 计算几何·多边形重心
思路: 多边形面积->任选一个点,把多边形拆成三角,叉积一下 三角形重心->(x1+x2+x3)/3,(y1+y2+y3)/3 多边形重心公式题目中有,套一下就好了 计算多边形重心方法: ...
- hdu 1115(多边形重心)
求多边形重心的题目大致有这么几种: 1.质量集中在顶点上 n个顶点坐标为(xi,yi),质量为mi,则重心 X = ∑( xi×mi ) / ∑mi Y = ∑( yi×mi ) / ...
- HDOJ(1115)多边形重心
Lifting the Stone http://acm.hdu.edu.cn/showproblem.php?pid=1115 题目描述:输入n个顶点(整数),求它们围成的多边形的重心. 算法:以一 ...
- HDU 1115 Lifting the Stone(求多边形重心)
HDU 1115 大意:给你个n,有n个点,然后给你n个点的坐标,求这n个点形成的多边形的重心的坐标. 1 struct point 2 { 3 double x, y; 4 } P[1000010] ...
- 不规则多边形重心求解
文章目录 一.不规则多边形重心求解 1.1 三角形重心计算方法 1.2 三角形面积计算方法 1.3 多边形面积的计算方法 1.4 不规则多边形的重心计算方法 一.不规则多边形重心求解 1.1 三角形重 ...
- java计算一个多边形的重心_多边形重心问题 java
多边形重心问题 java 看题目 点这里 题目描述: 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以 ...
- 南阳 3 多边形重心问题(数学几何)
多边形重心问题 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接), ...
- java计算一个多边形的重心_Java多边形重心计算
多边形重心计算 三角形重心 顶点为a,b,c的三角形重心为x = (xa + xb + xc) / 3,y = (ya + yb + yc) / 3 多边形重心 x = (x1w1 + x2w2 + ...
最新文章
- 一些基本算法的递归实现
- 通过IGRP路由协议实现非等值带宽的负载平衡
- 前端学习(177):定义列表
- php数组实例,php常用数组函数实例小结
- java中bean对象_JAVA中PO,BO,VO,DTO,POJO,Entity,JavaBean,JavaBeans各个对象的区别,以及lombo、jpa简介及用法...
- WPF自定义控件 —— 布局
- 所有赚不到钱的人都是干了自己不愿意或者自己很讨厌的事
- VScode使用记录二:Windows 7下安装GCC、使用VSCode编译代码
- 【安装部署】Linus安装Mysql
- 这十个Python实战项目,让你瞬间读懂Python!
- selenium 在pycharm中安装selenium
- 怎么完全卸载赛门铁克_赛门铁克(sep)卸载方法
- PHP开发基于Mirai的QQ机器人(一)
- 自己总结的wireshark抓包技巧
- Unix 开机时如何自启动oracle
- 【ubuntu】安装vmwaretools后还是不能复制粘贴---实测解决。
- 算法工程师的工程修养:Linux 服务器性能故障分析
- Danar程序员之家
- 8款HTML5动画特效推荐源码
- WJ13-涂鸦版参数