HDU 1115 Lifting the Stone
来源:互联网 发布:仓库物料管理数据库表 编辑:程序博客网 时间:2024/05/23 13:48
Lifting the Stone
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3935 Accepted Submission(s): 1627
245 00 5-5 00 -541 111 111 111 11
0.00 0.006.00 6.00
1. 1 累加和求重心
设平面上有N 个离散数据点( xi , yi ) ( i = 1, 2, ., n) , 其
多边形重心G( . x1, . y1) 为:
这是求多边形最简单直观的方法。可以直接利用离散数
据点的x, y坐标就能求图形重心。但是缺陷在于没有对离散
数据点所围图形做任何处理和分析,精度不够。
1. 2 算法一:在讲该算法时,先要明白下面几个定理。
定理1 已知三角形△A1A2A3的顶点坐标Ai ( xi , yi ) ( i =1, 2, 3) 。它的重心坐标为:
xg = (x1+x2+x3) / 3 ; yg = (y1+y2+y3) / 3 ;
定理2 已知三角形△A1A2A3的顶点坐标Ai ( xi , yi ) ( i =1, 2, 3) 。该三角形的面积为:
S = ( (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1) ) / 2 ;
△A1A2A3 边界构成逆时针回路时取+ , 顺时针时取 -。
另外在求解的过程中,不需要考虑点的输入顺序是顺时针还是逆时针,相除后就抵消了。
原理:将多边形划分成n个小区域, 每个小区域面积为σi ,重心为Gi ( . xi , . yi ) ,利用求平面薄板重心公式把积分变
成累加和:
由前面所提出的原理和数学定理可以得出求离散数据点所围多边形的一般重心公式:以Ai ( xi , yi ) ( i = 1, 2, ., n) 为顶点的任意N边形A1A2 .An ,将它划 分成N - 2个三角形(如图1) 。每个三角形的重心为Gi ( . xi , . yi ) ,面积为σi。那么多边形的重心坐标G( .x2, .y2) 为:
图1 多边形分解
AC代码:
#include <iostream>#include <cmath>#include <cstdio>using namespace std;double area(double x0,double y0,double x1,double y1,double x2,double y2){ return x0*y1+x2*y0+x1*y2-x2*y1-x0*y2-x1*y0;}int main(){ int t,n; double x0,y0,x1,y1,x2,y2; cin>>t; while(t--) { double sum_x=0,sum_y=0,sum_area=0,s; cin>>n; cin>>x0>>y0; cin>>x1>>y1; n-=2; while(n--) { cin>>x2>>y2; s=area(x0,y0,x1,y1,x2,y2); sum_area+=s; sum_x+=(x0+x1+x2)*s; sum_y+=(y0+y1+y2)*s; x1=x2; y1=y2; } printf("%.2lf %.2lf\n",sum_x/3/sum_area,sum_y/3/sum_area); }return 0;}
- HDU 1115 Lifting the Stone
- HDU 1115 Lifting the Stone
- hdu-1115-Lifting the Stone
- hdu 1115 Lifting the Stone
- HDU 1115 Lifting the Stone
- HDU 1115 Lifting the Stone
- HDU-Lifting the Stone
- HDU 1115 Lifting the Stone 计算几何
- HDU 1115 Lifting the Stone(多边形重心)
- hdu 1115 Lifting the Stone 多边形面积
- hdu 1115 Lifting the Stone (重心问题)
- 求重心-hdu-1115-Lifting the Stone
- 【多边形重心】hdu 1115 Lifting the Stone
- hdu 1115 Lifting the Stone 计算几何
- HDU 1115 Lifting the Stone(多边形重心)
- hdu 1115 Lifting the Stone【多边形重心】
- hdu 1115 Lifting the Stone【多边形重心】
- HDU 1115 Lifting the Stone (多边形重心)
- 二叉树的操作
- AsyncTask几点要注意的地方
- SQL中Limit关键字的使用
- 安装UBUNTU记录
- hdu 1098 数学归纳法 二项式定理
- HDU 1115 Lifting the Stone
- vim 替换操作大全
- 解密Facebook产品的开发流程
- Android 4.0新的广播机制FLAG_EXCLUDE_STOPPED_PACKAGES
- Java线程:并发协作-生产者消费者模型
- UESTC 1546 Bracket Sequence
- Android手机一键Root原理分析(作者:非虫,文章来自:《黑客防线》2012年7月)
- Winsows下SVN版本控制器的安装与使用
- 盘点科技行业最具创意的25个人