HDU 1115(求质量均匀分布的多边形重心 物理)
题意是给一个 n 边形,给出沿逆时针方向分布的各顶点的坐标,求出 n 边形的重心。
求多边形重心的情况大致上有三种:
一、多边形的质量都分布在各顶点上,像是用轻杆连接成的多边形框,各顶点的坐标为Xi,Yi,质量为mi,则重心坐标为:
X = ∑( xi * mi ) / ∑ mi ;
Y = ∑( yi * mi) / ∑ mi;
若每个顶点的质量相等,则重心坐标为:
X = ∑ xi / n;
Y = ∑ yi / n;
二、多边形的质量分布均匀,像是用密度相同的材料制成的多边形板子,多采用将多边形分割成 n - 2 个三角形,(个人喜欢以原点和多边形逆时针方向上连续两点作为每个三角形的三顶点,因为算面积使用的是向量叉乘,用原点可以减少对三角形两边向量的求解(直接用坐标即可),而叉乘得到的是有向面积,对结果并无影响)再求出每个三角形的重心:
X = (x0 + x1 + x2) / 3;
Y = (y0 + y1 + y2) / 3;
再将各重心视作情况一处理即可
要注意的是这种情况下并不是求三角形重心的简单推广,也就是说不能简单的用不断分割三角形求重心的方法去做
三、多边形的质量分布不均匀,此时要用到积分的方法。
本题属于第二种情况,所以按照第二种情况的处理方式处理即可。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <iomanip>
using namespace std; struct point
{
double x,y;
}pi[];
double cp(point a,point b)
{
return (a.x*b.y)-(a.y*b.x);
}
point gravity(point *p, int n)
{
double area = ;
point center;
center.x = center.y = ;
for (int i = ; i < n-; i++)
{
area += cp(p[i],p[i+]);
center.x += cp(p[i],p[i+]) * (p[i].x + p[i+].x);
center.y += cp(p[i],p[i+]) * (p[i].y + p[i+].y);
/*此处其实是:
area += cp(p[i],p[i+1]) / 2;
center.x += (cp(p[i],p[i+1]) / 2)* ((p[i].x + p[i+1].x + 0) / 3);
center.y += (cp(p[i],p[i+1]) / 2)* ((p[i].y + p[i+1].y + 0) / 3);
但一些计算过程中的常数在实际运算时被总写了。
*/
}
area += cp(p[n-],p[]);//area += cp(p[n-1],p[0]) / 2;
center.x += cp(p[n-],p[]) * (p[n-].x + p[].x);//center.x += (cp(p[n-1],p[0]) / 2) * ((p[n-1].x + p[0].x + 0) / 3);
center.y += cp(p[n-],p[]) * (p[n-].y + p[].y);//center.y += (cp(p[n-1],p[0]) / 2) * ((p[n-1].y + p[0].y + 0) / 3);
center.x /= *area;//center.x /= area;
center.y /= *area;//center.y /= area;
return center;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i = ; i < n; i++)
scanf("%lf %lf",&pi[i].x,&pi[i].y);
point out = gravity(pi,n);
printf("%.2f %.2f\n",out.x,out.y);
}
return ;
}
HDU 1115(求质量均匀分布的多边形重心 物理)的更多相关文章
- hdu 1115:Lifting the Stone(计算几何,求多边形重心。 过年好!)
Lifting the Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hdu 1115(计算多边形重心)
题意:已知一多边形没有边相交,质量分布均匀.顺序给出多边形的顶点坐标,求其重心. 分析: 求多边形重心的题目大致有这么几种: 1,质量集中在顶点上.n个顶点坐标为(xi,yi),质量为mi,则重心 X ...
- hdu 1115(多边形重心问题)
Lifting the Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDOJ(1115)多边形重心
Lifting the Stone http://acm.hdu.edu.cn/showproblem.php?pid=1115 题目描述:输入n个顶点(整数),求它们围成的多边形的重心. 算法:以一 ...
- hdu1115 Lifting the Stone(几何,求多边形重心模板题)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=1115">http://acm.hdu.edu.cn/showproblem.php ...
- UVALive 4426 Blast the Enemy! --求多边形重心
题意:求一个不规则简单多边形的重心. 解法:多边形的重心就是所有三角形的重心对面积的加权平均数. 关于求多边形重心的文章: 求多边形重心 用叉积搞一搞就行了. 代码: #include <ios ...
- Lifting the Stone(多边形重心)
Lifting the Stone Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- poj 1115 Lifting the Stone 计算多边形的中心
Lifting the Stone Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- hdu 1115 Lifting the Stone
题目链接:hdu 1115 计算几何求多边形的重心,弄清算法后就是裸题了,这儿有篇博客写得很不错的: 计算几何-多边形的重心 代码如下: #include<cstdio> #include ...
随机推荐
- hdu 5877 Weak Pair (Treap)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5877 题面; Weak Pair Time Limit: 4000/2000 MS (Java/Other ...
- 51nod 1443 路径和树(最短路树)
题目链接:路径和树 题意:给定无向带权连通图,求从u开始边权和最小的最短路树,输出最小边权和. 题解:构造出最短路树,把存留下来的边权全部加起来.(跑dijkstra的时候松弛加上$ < $变成 ...
- CF1139D Steps to One(DP,莫比乌斯反演,质因数分解)
stm这是div2的D题……我要对不住我这个紫名了…… 题目链接:CF原网 洛谷 题目大意:有个一开始为空的序列.每次操作会往序列最后加一个 $1$ 到 $m$ 的随机整数.当整个序列的 $\gcd ...
- 学习笔记:fhq-treap
0. 前置知识:\(treap\)的定义 树堆,在数据结构中也称Treap,是指有一个随机附加域满足堆的性质的二叉搜索树,其结构相当于以随机数据插入的二叉搜索树. >--摘自百度百科 形象化 ...
- kali源更新
对于新装kali的同学一点存在着更新源的问题 这是对初次安装,进行系统更新的教程 首先需要有gpg_key wget -q -O - https://archive.kali.org/archive- ...
- 对于submit text3运行Python脚本的解决方法
先抛出一些配置信息吧 电脑安装了Python2和Python3两种版本,并且还改了exe文件的名字,可能这与默认的submit text3配置不同了吧,导致错误. 先抛出一些错误吧 首先,自动CTRL ...
- poj3889 fractal streets
分形街道 我干,这个毒瘤. 想起来就头痛. 首先看题就是一大难题...... 说一下题目大意吧. 每当n+1时,把n阶图复制为4份.2*2排好. 右边两个不动.左上顺时针旋转90°,左下逆时针旋转90 ...
- 后缀数组的第X种求法
后缀自动机构造后缀数组. 因为有个SB题洛谷5115,它逼迫我学习后缀数组...(边分树合并是啥?). 一些定义:sa[i]表示字典序排第i的后缀是从哪里开始的.Rank[i]表示后缀i的排名.hei ...
- 【译】10. Java反射——数组
原文地址:http://tutorials.jenkov.com/java-reflection/arrays.html ======================================= ...
- Failed to resolve: com.android.support:appcompat-v7:28 问题解决
apply plugin: 'com.android.application' android { compileSdkVersion buildToolsVersion "28.0.2&q ...