思路:

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

三角形重心->(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. 这两者需要映射到相同的服务器,从而无法打开项目的解决方法:
  2. python列表(数组)
  3. 网页html是什么语言程序,html是什么
  4. iptables的增删改查
  5. Little Sub and Counting
  6. boost::filesystem模块和boost::timer混合的测试程序
  7. 自学it18大数据笔记-第三阶段Scala-day06——会持续更新……
  8. struts2.1.6教程二、struts.xml配置及例程
  9. Flex与javascript通信
  10. cygwin开发环境搭建与apt-cyg的应用
  11. 查看Full GC方法:1,jconsel:2,linux 命令: jstat -gcutil id 4s 10003,linux 命令(前提有.gc日志):c
  12. Flutter Gzip 编码与解码 Dart Gzip 工具类操作
  13. python把字符串3des加密_Python干货之六大密码学编程库
  14. SpringBoot中修改MySQL数据库建表方言
  15. 【深入理解Nginx】Nginx的配置
  16. boost电路输出电流公式_boost升压电路参数计算
  17. 《Linux设备驱动开发详解 A》一一3.1 Linux内核的发展与演变
  18. 关于高通平台下camera一些参数的设置
  19. 深信服校园招聘安全攻防A卷
  20. Windows循环渐进-Ping程序实现代码

热门文章

  1. R语言数据可视化 ggplot2基础2 创建单图层的散点图 创建facet
  2. UA MATH 571B Tukey‘s Test for Non-additivity
  3. CentOS查看已挂载的文件系统和文件系统信息
  4. C++结构名、联合名、枚举名都是类型名
  5. 各种Oracle常见操作2
  6. PostgreSQL源码分析
  7. Maven父子工程配置文件详解
  8. web安全之windows系统基础
  9. jmeter测试java代码
  10. 【BZOJ 1036】[ZJOI2008]树的统计Count