POJ 1654(计算几何基础多边形面积)
2017-12-26 00:44
525 查看
题意:给你一串数字,每个数字分别代表不同的方向,一定是在1x1的格子中走动,问最后围成的多边形面积是多少
题解:将整个多边形划分,
ans = (∑相邻两个点分别与原点构成的线段的叉积 )/ 2
由叉积的几何意义可知求得的结果是一个平行四边形的面积
题解:将整个多边形划分,
ans = (∑相邻两个点分别与原点构成的线段的叉积 )/ 2
由叉积的几何意义可知求得的结果是一个平行四边形的面积
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <string> #include <map> #include <cmath> #include <queue> #include <set> #define INF 0x3f3f3f3f using namespace std; const int maxn = 1e6 + 5; typedef long long LL; int dx[] = {0,-1,0,1,-1,0,1,-1,0,1}; int dy[] = {0,-1,-1,-1,0,0,0,1,1,1}; struct Point{ int x,y; Point(){} Point(int xx, int yy):x(xx),y(yy){} }; LL cross(Point a, Point b, Point c){ return (c.x-a.x)*(c.y-b.y)-(c.x-b.x)*(c.y-a.y); } int main(){ int n; char s[maxn]; scanf("%d",&n); while(n--){ scanf("%s",s); int len = (int)strlen(s); Point a(0,0); Point dot(0,0); LL ans = 0; for(int i=0; i<len; i++){ Point b(a.x+dx[s[i]-'0'],a.y+dy[s[i]-'0']); ans += cross(a,b,dot); a = b; } if(ans < 0) ans = -ans; printf("%lld",ans/2); if(ans % 2 == 1) printf(".5"); printf("\n"); } }
相关文章推荐
- poj1654—Area(计算几何求多边形面积)
- (计算几何POJ step 8.1.1.2)POJ 1654 Area(使用叉积来计算多边形面积)
- [POJ1654]Area(计算几何-多边形的面积)
- poj 1654 多边形面积计算
- poj 1654 多边形面积计算
- poj 3348 Cows 凸包 求多边形面积 计算几何 难度:0 Source:CCC207
- poj 1654 多边形面积计算
- 叉乘计算多边形面积:poj 1654 Area
- POJ 1654 Area 计算几何基础
- POJ 1654 Area (计算多边形面积)
- POJ-3348 Cows 计算几何 求凸包 求多边形面积
- POJ 1654 (平面几何 多边形面积 水~)
- POJ 1408-Fishnet(计算几何-根据交点求多边形面积)
- POJ 1654 (平面几何 多边形面积 水~)
- [知识点]计算几何I——基础知识与多边形面积
- poj 1265 Area【计算几何:叉积计算多边形面积+pick定理计算多边形内点数+计算多边形边上点数】
- POJ 1654 Area(叉积计算多边形面积)
- POJ1654 Area(多边形面积,叉积求三角形面积)
- 计算几何基础NYOJ——67三角形面积
- HDU 5230 (计算几何 圆和多边形面积交)