POJ 3855 计算几何·多边形重心
思路:
多边形面积->任选一个点,把多边形拆成三角,叉积一下
三角形重心->(x1+x2+x3)/3,(y1+y2+y3)/3
多边形重心公式题目中有,套一下就好了
计算多边形重心方法:
(1)划分多边形为三角形:
以多边形的一个顶点V为源点(V可取输入的第一个顶点),作连结V与所有非相邻顶点的线段,即将原N边形或分为(N-2)个三角形;
(2)求每个三角形的重心和面积:
设某个三角形的重心为G(cx,cy),顶点坐标分别为A1(x1,y1),A2(x2,y2),A3(x3,y3),则有cx = (x1 + x2 + x3)/3.同理求得cy。求面积的方法是s = ( (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1) ) / 2,当A1,A2,A3顺时针排列时取-,否则取正(此定理不证)。事实上,在求每个三角形时不需要辨别正负,之后有方法抵消负号,见下述。
(3)求原多边形的重心:
公式:cx = (∑ cx[i]*s[i]) / ∑s[i]; cy = (∑ cy[i]*s[i] ) / ∑s[i];其中(cx[i], cy[i]), s[i]分别是所划分的第i个三角形的重心坐标和面积。由题“ connect the points in the given order”知每个s[i]的正负号相同,故而∑ cx[i]*s[i]能与∑s[i]消号,所以根本不需要在第(2)步判断每个s[i]的正负。另外,在(2)中求每个重心坐标时要除以3,实际上不需要在求每个三角形坐标时都除以3,只需要求出∑ cx[i]*s[i]后一次性除以3即可。即是多边形重心坐标变为:cx = (∑ cx[i]*s[i]) / (3*∑s[i]); cy = (∑ cy[i]*s[i] ) / (3*∑s[i]);
https://blog.csdn.net/nhl19961226/article/details/68941585
//By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,cases;double S,ts; struct P{double x,y;}p[105],ans; P operator-(P a,P b){P c;c.x=a.x-b.x,c.y=a.y-b.y;return c;} double operator*(P a,P b){return a.x*b.y-a.y*b.x;} int main(){while(scanf("%d",&n)&&n){S=ans.x=ans.y=0;for(int i=0;i<n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);for(int i=0;i<n;i++){ts=p[i]*p[(i+1)%n];S+=ts;ans.x+=ts*(p[i].x+p[(i+1)%n].x)/3;ans.y+=ts*(p[i].y+p[(i+1)%n].y)/3;}printf("Stage #%d: %lf %lf\n",++cases,ans.x/S,ans.y/S);} }
转载于:https://www.cnblogs.com/SiriusRen/p/9383323.html
POJ 3855 计算几何·多边形重心相关推荐
- LISP多边形形心计算公式_计算几何-多边形重心公式
这是求多边形最简单直观的方法.可以直接利用离散数据点的 x, y 坐标就能求图形重心. 但是缺陷在于没有对离散数据点所围图形做任何处理和分析 , 精度不够. 1. 2 算法一:在讲该算法时,先要明白下 ...
- 【算法:数学】计算几何-多边形的重心
转载:计算几何-多边形的重心 1. 1 累加和求重心 设平面上有N 个离散数据点( xi , yi ) ( i = 1, 2, ., n) , 其 多边形重心G( . x1, . y1) 为: 这是求 ...
- 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 ) / ...
- poj 1654 Area 多边形面积
/* poj 1654 Area 多边形面积题目意思很简单,但是1000000的point开不了 */ #include<stdio.h> #include<math.h> # ...
- HDU 1115 Lifting the Stone(求多边形重心)
HDU 1115 大意:给你个n,有n个点,然后给你n个点的坐标,求这n个点形成的多边形的重心的坐标. 1 struct point 2 { 3 double x, y; 4 } P[1000010] ...
- NYOJ 3:多边形重心问题
多边形重心问题 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接), ...
- 不规则多边形重心求解
文章目录 一.不规则多边形重心求解 1.1 三角形重心计算方法 1.2 三角形面积计算方法 1.3 多边形面积的计算方法 1.4 不规则多边形的重心计算方法 一.不规则多边形重心求解 1.1 三角形重 ...
- java计算一个多边形的重心_多边形重心问题 java
多边形重心问题 java 看题目 点这里 题目描述: 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以 ...
最新文章
- python学习音频-详解python播放音频的三种方法
- Opencv 图像叠加 添加水印
- adguard拦截规则存在哪里_AdGuard 过滤规则分享
- list赋值给另一个list_Python小知识: List的赋值方法,不能直接等于
- error40;无法打开到SQL Server的连接,设置了Tcp/IP等也不能连接的问题
- OpenGL:画个水壶
- Linux以下基于TCP多线程聊天室(client)
- 值得借鉴的促销海报模板素材,卖不出去都难
- _如何在各种Linux发行版中安装zip压缩与解压缩程序
- opencv linux 编译好,linux下编译opencv
- ajax fetch api,fetch 简介: 新一代 Ajax API
- Kotlin基础学习第5章—表达式
- 聊一聊,小程序的开发
- UiPath官网手把手中文教程
- 1.4树莓派SSH远程登录
- Linux下使用为知笔记的坑和解决办法
- matlab ext2int,PF_MATLAB_new 一个非常不错的粒子滤波工具箱,基于面向对象的思 实 实现非线性 ,包 238万源代码下载- www.pudn.com...
- 拥有火绒后关闭Windows防火墙
- 什么是UPS UPS的选购技巧介绍
- 键盘过滤驱动之IRP劫持