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 ...
随机推荐
- opencv图像融合(大头)
单纯的变大再覆盖上去,头部检测信息不够全,效果实在是太差,就不多说了,只是按照自己的思路玩一玩,没有达到抖音上那么好的效果 import cv2 as cv import numpy as np im ...
- 【比赛】NOIP2018 保卫王国
DDP模板题 #include<bits/stdc++.h> #define ui unsigned int #define ll long long #define db double ...
- 自学华为IoT物联网_05 能源工业物联网常见问题及解决方案
点击返回自学华为IoT物流网 自学华为IoT物联网_05 能源工业物联网常见问题及解决方案 1. 1 能源工业--油田业务面临的三大挑战 故障处理不及时: 部分油田开采难道大.机械故障较多.现场发生的 ...
- AXURE 8弄一个轮播图的步骤
这个图是网上找到,7.0可以使用. 如果是8.0.没有找到"动态面板"这个地方,如下图所示
- [HNOI2007]梦幻岛宝珠(背包)
给你N颗宝石,每颗宝石都有重量和价值.要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为,并输出最大的总价值.数据范围:N<=100;W<=2^30,并且保证每颗宝石的重量符 ...
- BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)
题面戳这 化下题面给的式子: \(z_u+z_v=p_u+p_v-b_{u,v}\) 发现\(p_u+p_v-b_{u,v}\)是确定的,所以只要确定了一个点\(i\)的权值\(x_i\),和它在同一 ...
- 洛谷P1196 银河英雄传说
大意:你有30000个队列,第i个队列中只有i 有T个操作,1,把某个队列头接到另一个队列尾. 2,问两个元素之间的距离. 本题主要有三种解法. ①带权并查集. 具体来说就是,并查集维护当前集合的大小 ...
- php关联Apache和nginx
编辑apache配置文件httpd.conf,以apache支持php vim /etc/httpd/httpd.conf添加如下二行 AddType application/x-httpd-php ...
- bat 复制文件夹,文件名递增 等操作
句尾无';' @echo off : 回显,使命令不在dos中一行一行输出 pause : 暂停,以便看到输出结果 变量 %% 与 % % : https://zhidao.baidu.com/que ...
- win10开机自启动
快捷方式复制到win+ R 编辑shell:startup enter后的文件夹中