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 ...
随机推荐
- C#中的异步和多线程
许多开发人员对异步代码和多线程以及它们的工作原理和使用方法都有错误的认识.在这里,你将了解这两个概念之间的区别,并使用c#实现它们. 我:"服务员,这是我第一次来这家餐厅.通常需要4个小时才 ...
- 【Linux】Linux下如何分区及如何格式化
环境:CentOS7.1 磁盘大小是1.8T 将磁盘/dev/sda分一个分区,分区类型为xfs fdisk /dev/sda n --创建新分区 p --创建分区类型为主分区 1 --主分 ...
- CSAPP:Lab0 -Docker搭建纯净Linux环境
1. 安装docker 在mac-os下我们可以利用homebrew很容易的安装docker. brew install docker 当然去官网下载也很容易 Empowering App Devel ...
- oracle rac搭建单实例DG步骤(阅读全篇后再做)
环境介绍 主库: 主机名 rac01 rac02 实体IP 10.206.132.232 10.206.132.233 私有IP 192.168.56.12 192.168.56.13 虚拟IP 10 ...
- Centos7下安装MySQL8.0.23-小白的开始
首先简单介绍一下什么叫MySQL: 数据库简而言之就是存储数据的仓库,为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上.是为了实现一定的目的,按照某种规则组织起来的数据的集合: MySQL ...
- [CPP] STL 简介
STL 即标准模板库(Standard Template Library),是 C++ 标准库的一部分,里面包含了一些模板化的通用的数据结构和算法.STL 基于模版的实现,因此能够支持自定义的数据结构 ...
- django中的几种返回模版的方式
redirect方法-----(重定向) # 首先导入redirect方法, from django.shortcuts import redirect 在函数中写一个返回值 return redir ...
- 《awk中文手册》-本人参考官方手册翻译
01. 简介 AWK是一个文本(面向行和列)处理工具,同时它也是一门脚本语言. AWK其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernigha ...
- rbd-db数据迁移至外部数据库
部署外部数据库 安装Docker export VERSION=19.03 && curl -fsSL http://rainbond-pkg.oss-cn-shanghai.aliy ...
- 一文搞定全场景K3s离线安装
作者简介 王海龙,Rancher中国社区技术经理,负责Rancher中国技术社区的维护和运营.拥有6年的云计算领域经验,经历了OpenStack到Kubernetes的技术变革,无论底层操作系统Lin ...