思路:

多边形面积->任选一个点,把多边形拆成三角,叉积一下

三角形重心->(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 计算几何·多边形重心相关推荐

  1. LISP多边形形心计算公式_计算几何-多边形重心公式

    这是求多边形最简单直观的方法.可以直接利用离散数据点的 x, y 坐标就能求图形重心. 但是缺陷在于没有对离散数据点所围图形做任何处理和分析 , 精度不够. 1. 2 算法一:在讲该算法时,先要明白下 ...

  2. 【算法:数学】计算几何-多边形的重心

    转载:计算几何-多边形的重心 1. 1 累加和求重心 设平面上有N 个离散数据点( xi , yi ) ( i = 1, 2, ., n) , 其 多边形重心G( . x1, . y1) 为: 这是求 ...

  3. HDOJ(1115)多边形重心

    Lifting the Stone http://acm.hdu.edu.cn/showproblem.php?pid=1115 题目描述:输入n个顶点(整数),求它们围成的多边形的重心. 算法:以一 ...

  4. hdu 1115(多边形重心)

    求多边形重心的题目大致有这么几种:  1.质量集中在顶点上      n个顶点坐标为(xi,yi),质量为mi,则重心  X = ∑( xi×mi ) / ∑mi  Y = ∑( yi×mi ) / ...

  5. poj 1654 Area 多边形面积

    /* poj 1654 Area 多边形面积题目意思很简单,但是1000000的point开不了 */ #include<stdio.h> #include<math.h> # ...

  6. HDU 1115 Lifting the Stone(求多边形重心)

    HDU 1115 大意:给你个n,有n个点,然后给你n个点的坐标,求这n个点形成的多边形的重心的坐标. 1 struct point 2 { 3 double x, y; 4 } P[1000010] ...

  7. NYOJ 3:多边形重心问题

    多边形重心问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接), ...

  8. 不规则多边形重心求解

    文章目录 一.不规则多边形重心求解 1.1 三角形重心计算方法 1.2 三角形面积计算方法 1.3 多边形面积的计算方法 1.4 不规则多边形的重心计算方法 一.不规则多边形重心求解 1.1 三角形重 ...

  9. java计算一个多边形的重心_多边形重心问题 java

    多边形重心问题 java 看题目 点这里 题目描述: 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以 ...

最新文章

  1. python学习音频-详解python播放音频的三种方法
  2. Opencv 图像叠加 添加水印
  3. adguard拦截规则存在哪里_AdGuard 过滤规则分享
  4. list赋值给另一个list_Python小知识: List的赋值方法,不能直接等于
  5. error40;无法打开到SQL Server的连接,设置了Tcp/IP等也不能连接的问题
  6. OpenGL:画个水壶
  7. Linux以下基于TCP多线程聊天室(client)
  8. 值得借鉴的促销海报模板素材,卖不出去都难
  9. _如何在各种Linux发行版中安装zip压缩与解压缩程序
  10. opencv linux 编译好,linux下编译opencv
  11. ajax fetch api,fetch 简介: 新一代 Ajax API
  12. Kotlin基础学习第5章—表达式
  13. 聊一聊,小程序的开发
  14. UiPath官网手把手中文教程
  15. 1.4树莓派SSH远程登录
  16. Linux下使用为知笔记的坑和解决办法
  17. matlab ext2int,PF_MATLAB_new 一个非常不错的粒子滤波工具箱,基于面向对象的思 实 实现非线性 ,包 238万源代码下载- www.pudn.com...
  18. 拥有火绒后关闭Windows防火墙
  19. 什么是UPS UPS的选购技巧介绍
  20. 键盘过滤驱动之IRP劫持

热门文章

  1. Eclipse键盘控
  2. Invoke shell in Java
  3. 理解Promise (1)
  4. Jmeter学习系列----1 环境搭建
  5. Android Support 包里到底有什么
  6. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
  7. PHP中过滤常用标签的正则表达式
  8. PowerDesigner使用教程 —— 概念数据模型详解
  9. php学习之------[流程控制]
  10. 为什么分类对象越多训练时间越长?