POJ 1654 Area(叉积计算多边形面积)
2014-04-25 21:11
471 查看
题目链接:POJ 1654 Area
计算多边形面积,利用叉积可以方便的计算任意边数的多边形面积,凹凸多边形都可以。首先规定一个方向,然后选取多边形上的一个点作为起点,之后依次选择相邻两个点,计算这两个点与起点组成的三角形的有向面积。
这个题选取原点作为起点,之后计算有向面积相加就可以了。
计算多边形面积,利用叉积可以方便的计算任意边数的多边形面积,凹凸多边形都可以。首先规定一个方向,然后选取多边形上的一个点作为起点,之后依次选择相邻两个点,计算这两个点与起点组成的三角形的有向面积。
这个题选取原点作为起点,之后计算有向面积相加就可以了。
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> using namespace std; const int MAX_N = 1000000 + 100; char dir[MAX_N]; void get_dir(int &x, int &y, char c) { switch(c) { case '8': y++; break; case '2': y--; break; case '6': x++; break; case '4': x--; break; case '9': x++, y++; break; case '7': x--, y++; break; case '3': x++, y--; break; case '1': x--, y--; break; } } int main() { int T; scanf("%d", &T); while(T--) { scanf("%s", dir); int x1, y1, x2, y2; x1 = x2 = y1 = y2 = 0; int len = strlen(dir); get_dir(x1, y1, dir[0]); x2 = x1, y2 = y1; for(int i = 1; i < len - 1; i++) { get_dir(x2, y2, dir[i]); area += x1 * y2 - y1 * x2; x1 = x2, y1 = y2; } if(area < 0) area = (-1) * area; if(area % 2 == 0) printf("%lld\n", area / 2); else printf("%lld.5\n", area / 2); } return 0; }
相关文章推荐
- (计算几何POJ step 8.1.1.2)POJ 1654 Area(使用叉积来计算多边形面积)
- poj 1654 Area(叉积求多边形面积)
- poj1654—Area(计算几何求多边形面积)
- poj 1654:Area 区域 ---- 叉积(求多边形面积)
- poj 1265 Area【计算几何:叉积计算多边形面积+pick定理计算多边形内点数+计算多边形边上点数】
- POJ 1654 Area (计算多边形面积)
- POJ1654 Area(多边形面积,叉积求三角形面积)
- [POJ1654]Area(计算几何-多边形的面积)
- 叉乘计算多边形面积:poj 1654 Area
- poj 1654 Area 多边形面积
- POJ 1265-Area(多边形面积、边点、内点-pick定理、叉积)
- poj 1654 Area (叉积求面积)
- POJ 1654 Area 多边形面积
- poj 1654 Area(求多边形面积 && 处理误差)
- poj 1654 area 简单多边形面积(简单题)
- POJ 1654 Area(多边形面积)
- POJ 1654 Area [多边形面积]
- POJ 1654 Area 多边形面积
- POJ 1654 Area(任意多边形面积)
- POJ 1654(计算几何基础多边形面积)