UVALive 4426 Blast the Enemy! --求多边形重心
2015-01-20 18:59
411 查看
题意:求一个不规则简单多边形的重心。
解法:多边形的重心就是所有三角形的重心对面积的加权平均数.
关于求多边形重心的文章: 求多边形重心
用叉积搞一搞就行了。
代码:
View Code
解法:多边形的重心就是所有三角形的重心对面积的加权平均数.
关于求多边形重心的文章: 求多边形重心
用叉积搞一搞就行了。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #define Mod 1000000007 #define eps 1e-8 using namespace std; struct Point{ double x,y; Point(double x=0, double y=0):x(x),y(y) {} void input() { scanf("%lf%lf",&x,&y); } }; typedef Point Vector; int dcmp(double x) { if(x < -eps) return -1; if(x > eps) return 1; return 0; } Vector operator + (Vector A, Vector B) { return Vector(A.x + B.x, A.y + B.y); } Vector operator - (Vector A, Vector B) { return Vector(A.x - B.x, A.y - B.y); } Vector operator * (Vector A, double p) { return Vector(A.x*p, A.y*p); } Vector operator / (Vector A, double p) { return Vector(A.x/p, A.y/p); } double Cross(Vector A, Vector B) { return A.x*B.y - A.y*B.x; } double CalcConvexArea(Point* p,int n) { //凸包面积 double area = 0.0; for(int i=1;i<n-1;i++) area += Cross(p[i]-p[0],p[i+1]-p[0]); return area*0.5; } Point p[106],ch[106]; int main() { int n,i,j,cs = 1; while(scanf("%d",&n)!=EOF && n) { for(i=0;i<n;i++) p[i].input(); double S = CalcConvexArea(p,n); double X = 0.0, Y = 0.0; for(i=2;i<n;i++) { double area = 0.5*Cross(p[i-1]-p[0],p[i]-p[0]); X += area*(p[0].x+p[i-1].x+p[i].x)/3.0; Y += area*(p[0].y+p[i-1].y+p[i].y)/3.0; } printf("Stage #%d: %.6f %.6f\n",cs++,X/S,Y/S); } return 0; }
View Code
相关文章推荐
- UVALive 4426 Blast the Enemy! 计算几何求重心
- UVALive-7146 Defeat the Enemy (map+贪心)
- UVA Live 7146 Defeat the Enemy(贪心+set)
- UVALive 7146 Defeat the Enemy(模拟)
- I - Defeat the Enemy UVALive - 7146 二分 + 贪心
- UVALive 7146 Defeat The Enemy
- The 2014 ACM-ICPC Asia Shanghai Regional Contest - I - Defeat the Enemy (贪心+multiset)UVALive - 7146
- UVA Live 7146 Defeat the Enemy——STL
- LA 4426 Blast the Enemy!
- UVALive 7146 Defeat the Enemy(贪心+STL)(2014 Asia Shanghai Regional Contest)
- UVA LIVE 7146 Defeat the Enemy
- UVALive 7146-贪心&数据结构stl-Defeat the Enemy
- UVALive - 7146 Defeat the Enemy [贪心+multiset]
- UVALive-3972 March of the Penguins (最大流:节点容量)
- uvalive3938 “Ray, Pass me the dishes!”
- Uvalive 3890 Most Distant Point from the Sea(半平面交+二分)
- UVALive 3942 Remember the Word 前缀树Trie
- The Mountain of Gold? UVALive - 6800
- UVALive 7061 Dire Wolf (dp)(The 2014 ACM-ICPC Asia Beijing Regional Contest D)
- UVAlive - 3938 —— Ray, Pass me the dishes! 【线段树】