多边形求重心 HDU1115
http://acm.hdu.edu.cn/showproblem.php?pid=1115
引用博客:https://blog.csdn.net/ysc504/article/details/8812339

//①质量集中在顶点上
// n个顶点坐标为(xi,yi),质量为mi,则重心
// X = ∑( xi×mi ) / ∑mi
// Y = ∑( yi×mi ) / ∑mi
// 特殊地,若每个点的质量相同,则
// X = ∑xi / n
// Y = ∑yi / n
//②质量分布均匀
// 特殊地,质量均匀的三角形重心:
// X = ( x0 + x1 + x2 ) / 3
// Y = ( y0 + y1 + y2 ) / 3
//③三角形面积公式:S = ( (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1) ) / 2 ;
//因此做题步骤:1、将多边形分割成n-2个三角形,根据③公式求每个三角形面积。
// 2、根据②求每个三角形重心。
// 3、根据①求得多边形重心。
#include <stdio.h>
struct Point
{
double x, y;
};
double area(Point p1, Point p2, Point p3)
{
return ((p2.x - p1.x) * (p3.y - p1.y) - (p3.x - p1.x) * (p2.y - p1.y)) / ;
}
int main()
{
int t, n, i;
Point p1, p2, p3;
double gx, gy, sumarea, temp;
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
gx = gy = sumarea = ;
scanf("%lf%lf%lf%lf", &p1.x, &p1.y, &p2.x, &p2.y);
for(i = ; i < n; i++)
{
scanf("%lf%lf", &p3.x, &p3.y);
temp = area(p1, p2, p3);
gx += (p1.x + p2.x + p3.x) * temp;
gy += (p1.y + p2.y + p3.y) * temp;
sumarea += temp;
p2 = p3;
}
gx = gx / sumarea / ;
gy = gy / sumarea / ;
printf("%.2lf %.2lf\n", gx, gy);
}
return ;
}
多边形求重心 HDU1115的更多相关文章
- hdu1115【多边形求重心模板】
1.质量集中在顶点上.n个顶点坐标为(xi,yi),质量为mi,则重心(∑( xi×mi ) / ∑mi, ∑( yi×mi ) / ∑mi) 2.质量分布均匀.这个题就是这一类型,算法和上面的不同. ...
- Lifting the Stone 计算几何 多边形求重心
Problem Description There are many secret openings in the floor which are covered by a big heavy sto ...
- HDU1115&&POJ1385Lifting the Stone(求多边形的重心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1115# 大意:给你个n,有n个点,然后给你n个点的坐标,求这n个点形成的多边形的重心的坐标. 直接套模 ...
- hdu1115(计算多边形几何重心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1115 题意:给出一些点,求这些点围成的多边形的重心: 思路: 方法1:直接分别求所有点的x坐标的平均值 ...
- Lifting the Stone(求多边形的重心—)
Lifting the Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- Lifting the Stone(hdu1115)多边形的重心
Lifting the Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- POJ 1385 Lifting the Stone (多边形的重心)
Lifting the Stone 题目链接: http://acm.hust.edu.cn/vjudge/contest/130510#problem/G Description There are ...
- [NetTopologySuite](2)任意多边形求交
任意多边形求交: private void btnPolygon_Click(object sender, EventArgs e) { , , , , , , , , , , , , , }; , ...
- C#多边形求角——实例说
前段时间有写过一个计算多边形角度的代码,这里给它整理整理,留给自己也送给萌新. 看左下图,这是一个多环的多边形,一个外环(内部为多边形内部区域),一个内环(外部为多边形内部区域),同时多边形中任意一个 ...
随机推荐
- parseInt parseFloat isNaN Number 区别和具体的转换规则及用法
原文链接:https://blog.csdn.net/wulove52/article/details/84953998 在javascript 我经常用到,parseInt.parseFloat.N ...
- 了解Springboot加载文件机制
https://blog.csdn.net/u014044812/article/details/84256764(
- Help Me Escape
题目: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4808 题意: 师傅被妖怪抓走了.有n个妖怪,每个妖怪有一个固定的战斗力 ...
- CentOS重新安装yum
1.问题描述 有时会出现yum不可用的错误,可以先卸载再重装. 2.操作步骤 (1).下载Python-iniparse-0.4 -9.el7.noarch.rpm (2).下载yum-3.4. ...
- Centos7安装Redis5.0.3
1.切换目录 cd tmp 2.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz 3.解压,删除压缩包 tar xzf redi ...
- Python基础之range()
range:指定范围,生成指定数字. 1. range() for i in range(1, 10): print(i) 执行结果为: 1 2 3 4 5 6 7 8 9 2. range()步长 ...
- 线程的join()方法
官网描述 join public final void join() throws InterruptedException Waits for this thread to die. An invo ...
- webstorm设置babel,使用es6
原文链接:https://blog.csdn.net/peade/article/details/76522177 网上有很多关于如何设置babel的.我学习着设置,但总差那么几步,没能满足我的需求. ...
- SRS之SrsTsContext::encode_pes详解
1. SrsTsContext::encode_pes 该函数位于 srs_kernel_ts.cpp 中.下面的分析基于假设当前要封装的消息是视频. /* * @msg: 要写入到 ts 文件中的音 ...
- tornado框架学习
tornado是一个非阻塞的web服务器框架,每秒可以处理上千个客户端连接(都是在一个线程中,不需要为每个客户端创建线程,资源消耗少),适合用来开发web长连接应用,如long polling(轮询) ...