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