POJ - 1654 利用叉积求三角形面积 去 间接求多边形面积
题意:在一个平面直角坐标系,一个点总是从原点出发,但是每次移动只能移动8个方向的中的一个并且每次移动距离
只有1和√2这两种情况,最后一定会回到原点(以字母5结束),请你计算这个点所画出图形的面积
题解:
叉积又叫向量积,如下图
设AC这条边为向量a,AB这条边为向量b,夹角为
那么会有:
那么一个多边形肯定是可以分解成多个三角形的,把它们的面积加到一起就行了
我们知道三角形的角度不是那么容易就可以求出来的,而且通过向量坐标也可以求向量积的模(下面给出三维模式下的)
二位模式下:
向量a=(x1,y1),向量b=(x2,y2)
(向量a*向量b)的模=x1*y2-x2*y1
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<math.h>
6 #include<vector>
7 #include<queue>
8 #include<stack>
9 #include<map>
10 using namespace std;
11 typedef long long ll;
12 const int maxn=1e6+10;
13 const int INF=0x3f3f3f3f;
14 const double eps=1e-8;
15 const double PI=3.1415926;
16 const int mod = 1e9+7;
17 #define mt(A,B) memset(A,B,sizeof(A))
18 #define lson l,m,rt*2
19 #define rson m+1,r,rt*2+1
20 #define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
21 #define zero(x) (((x)>0?(x):-(x))<eps)
22 int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};//8个方向
23 char str[maxn];
24 int main()
25 {
26 int T;
27 int n,m,i,j;
28 int x,y,u,v;
29 long long A;
30 cin>>T;
31 while(T--)
32 {
33 cin>>str;
34 n=strlen(str);
35 x=0;
36 y=0;
37 A=0;
38 for(i=0;i<(n-1);i++)
39 {
40 if(str[i]=='8')
41 {
42 u=x+dir[0][0];
43 v=y+dir[0][1];
44 }
45 else if(str[i]=='2')
46 {
47 u=x+dir[1][0];
48 v=y+dir[1][1];
49 }
50 else if(str[i]=='6')
51 {
52 u=x+dir[2][0];
53 v=y+dir[2][1];
54 }
55 else if(str[i]=='4')
56 {
57 u=x+dir[3][0];
58 v=y+dir[3][1];
59 }
60 else if(str[i]=='9')
61 {
62 u=x+dir[4][0];
63 v=y+dir[4][1];
64 }
65 else if(str[i]=='7')
66 {
67 u=x+dir[5][0];
68 v=y+dir[5][1];
69 }
70 else if(str[i]=='3')
71 {
72 u=x+dir[6][0];
73 v=y+dir[6][1];
74 }
75 else if(str[i]=='1')
76 {
77 u=x+dir[7][0];
78 v=y+dir[7][1];
79 }
80 A+=(u*y)-(v*x);//(u,v),(x,y)和(0,0)原点的叉积算出三角形的面积
81 x=u;
82 y=v;
83 }
84 if(A<0)//顺时针计算是负值
85 A=-A;
86 if(A%2==0)//如果面积可以整除2那么不会有精度缺失
87 cout<<A/2<<endl;
88 else//否则要加上0.5
89 cout<<A/2<<".5"<<endl;
90 }
91 return 0;
92 }
POJ - 1654 利用叉积求三角形面积 去 间接求多边形面积的更多相关文章
- poj 1654(利用叉积求面积)
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17937 Accepted: 4957 Description ...
- hdu 2528:Area(计算几何,求线段与直线交点 + 求多边形面积)
Area Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 多边形面积(Area_Of_Polygons)
原理: 任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出. 分析: 由于给出的点是相对于我们的坐标原点的坐标,每个点实际上我们可以当作一个顶点相对于原点的向量,如下图所示 ...
- poj 1654:Area 区域 ---- 叉积(求多边形面积)
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19398 Accepted: 5311 利用叉积求多边形面 ...
- poj 1654 Area(计算几何--叉积求多边形面积)
一个简单的用叉积求任意多边形面积的题,并不难,但我却错了很多次,double的数据应该是要转化为long long,我转成了int...这里为了节省内存尽量不开数组,直接计算,我MLE了一发...,最 ...
- POJ 2954 /// 皮克定理+叉积求三角形面积
题目大意: 给定三角形的三点坐标 判断在其内部包含多少个整点 题解及讲解 皮克定理 多边形面积s = 其内部整点in + 其边上整点li / 2 - 1 那么求内部整点就是 in = s + 1 - ...
- hdu 4709:Herding(叉积求三角形面积+枚举)
Herding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- Area - POJ 1654(求多边形面积)
题目大意:从原点开始,1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走.求出最后的多边形面积. 分析:这个多边形面积很明显是不规则的, ...
- poj 1265 Area【计算几何:叉积计算多边形面积+pick定理计算多边形内点数+计算多边形边上点数】
题目:http://poj.org/problem?id=1265 Sample Input 2 4 1 0 0 1 -1 0 0 -1 7 5 0 1 3 -2 2 -1 0 0 -3 -3 1 0 ...
随机推荐
- Spring框架之事务源码完全解析
Spring框架之事务源码完全解析 事务的定义及特性: 事务是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务将逻辑相关的一组操作绑定在一 ...
- LeetCode897. 递增顺序查找树
题目 法一.自己 1 class Solution { 2 public: 3 vector<int>res; 4 TreeNode* increasingBST(TreeNode* ro ...
- C语言变量
C语言变量 任何一种编程语言都离不开变量,特别是数据处理型程序,变量的使用非常频繁,没有变量参与程序甚至无法编制,即使编制运行后的意义也不大.变量之所以重要,是因为变量是编程语言中数据的符号标识和载体 ...
- 使用yaml来实现ingress-nginx
创建一个ingress-nginx [root@k8s-master ingress]# cat ingress-nginx.yaml apiVersion: v1 kind: Namespace m ...
- ABAP 面试问题和答案
What is an ABAP data dictionary?- ABAP 4 data dictionary describes the logical structures of the obj ...
- MySQL全面瓦解20:可编程性之流程控制语句
背景 说到流程控制语句,我们在程序语法中用的比较多,比如C#的if..else...,while...,?: 等.同样的,在MySQL中,也有一些流程控制的语法,方便我们在写函数.存储过程的时候对逻辑 ...
- 阅读lodash源码之旅数组方法篇-compact和concat
鲁迅说过:只有阅读过优秀库源码的人,才能配的上是真正的勇士. compact 创建一个新数组,包含原数组中所有的非假值元素.例如false, null,0, "", undefin ...
- 【MYSQL】DDL语句
介绍:DDL语句,即数据定义语句,定义了不同的数据段,数据库表.表.列.索引等数据库对象:例如,create.drop.alter 适用对象:一般是由数据库管理员DBA使用 1.连接数据库 mysql ...
- Mybatis入门Demo(单表的增删改查)
1.Mybatis 什么是Mybatis: mybatis是一个持久层框架,用java编写的 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动.创建连接等繁杂过程 ...
- JMeter去掉启动的cmd命令窗口和制作快捷方式
1.去掉启动的cmd命令窗口 在使用jmeter时,如果使用默认的jmeter.bat启动的话,会出现一个CMD命令窗口,之后才会启动jmeter工作界面: 如果直接启用ApacheJMeter.ja ...