叉乘计算多边形面积:poj 1654 Area
来源:互联网 发布:附近淘宝店 编辑:程序博客网 时间:2024/05/21 00:16
矢量积a×b的计算结果是垂直于a,b向量的矢量,其大小|a×b|=|a|·|b|·sin(a,b)=x1·y2-x2·y1模值的几何意义是以a,b为边的平行四边形的面积,利用向量的叉乘可以计算多边形的面积。
坐标表达式|a×b|=x1·y2-x2·y1.
题目大意
输入一串数字,不同的数字表示不同的运动方向,计算运动围成的多边形的面积。
解题思路
- 叉乘计算多边形面积,注意将方向存于方向数组dic[x][y]中,方便直接调用;
- 假设走1000000步围成正方形其面积6.25×10^10超int,大数用double精确表示会有精度误差,考虑用long long存储,最后判断奇偶性控制输出;
- point p1记录上一个点的坐标,point p2用于更新下一个点的坐标,更新一个叉乘一下,最后再/2即可
参考代码+部分注释
#include <iostream>#include <cstdio>#include <algorithm>#include <map>#include <vector>#include <queue>#include <cstring>#include <cmath>#include <climits>#define eps 1e-8using namespace std;typedef long long ll;const int INF=INT_MAX;const int maxn = 110;int dic[10][2]={{0,0},{-1,-1},{0,-1},{1,-1},{-1,0},{0,0},{1,0},{-1,1},{0,1},{1,1}};//方向数组,记录每个数字代表的运动方向struct point{ int x,y;};double cross_product(point a,point b){return a.x*b.y-b.x*a.y;}//向量叉乘表示平行四边形面积int main(){ // freopen("input.txt","r",stdin); int T;cin>>T; while(T--){ char ch; ll ans=0; //如果是正方形会超int,double会有精度陷阱,故同long long point p1,p2;p1.x=p1.y=p2.x=p2.y=0; while(cin>>ch&&ch!='5'){ p2.x+=dic[ch-'0'][0]; //更新p2 p2.y+=dic[ch-'0'][1]; ans+=cross_product(p2,p1);//累加 p1=p2; //更新p2的同时记录p2 } ans=ans<0?-ans:ans; if(ans&1) printf("%lld.5\n",ans/2);//平行四边形面积变三角形面积 else printf("%lld\n",ans/2); } return 0;}
0 0
- 叉乘计算多边形面积: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 Area [多边形面积]
- 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 Area 几何(叉积求多边形面积)
- Linux增强系统安全性:防止单用户模式(single)修改密码
- zoj 3228 Searching the String (ac自动机)
- POJ 3321 Apple Tree(树状数组)
- NSUserDefaults
- ecshop Ajax.call的使用
- 叉乘计算多边形面积:poj 1654 Area
- ORACLE 获取同期数据的两种方法
- 传球游戏
- SQL_Oracle 表中ID字段的自动递增
- HDOJ 1283 最简单的计算机(水)
- 【JavaScript】变量冲突是可以通过编译的
- jquery实现的整屏切换特效
- 从SD上加载jar并运行
- QTreeWidget实现动态加载本地文件系统