POJ 1474 Video Surveillance
只需要判断就行了 不需要正宗的半平面交
/*Point operator & (Line A,Line B) {Point C=A.s;double t=((A.s-B.s)^(B.s-B.e))/((A.s-A.e)^(B.s-B.e));C.x+=(A.e.x-A.s.x)*t; C.y+=(A.e.y-A.s.y)*t;return C; }半平面交 1.首先规定逆时针给点 判断的时候直接求有向面积 面积为负则是顺时针给的点 2.极角排序 (可以去重 留下靠左的一个) 3.模拟双端队列 判断队列尾部两线的交点和头部两线的交点在新加入线段哪一侧 左侧即合法 直接加入 右侧即不合法 删掉堆尾 4.因为我们 3 过程中始终保持队列数量至少为2 所以最后判断头部和尾部的合法性剩下的边<=2条的话 说明不存在内核 NOTE: 此题特殊 之存在上下左右方向的线 最后决定的线也只有4条 可以直接判断 不用打半平面交所以&交点也不需要考虑两线平行的情况 */ #include<cmath> #include<cstdio> #include<algorithm> using namespace std; const int N=150; const double eps=1e-9; struct Point {double x,y;Point(){}Point(double _x,double _y){x=_x,y=_y;} }p[N]; struct Line {Point s,e;Line(){}Line(Point _s,Point _e){s=_s,e=_e;} }l[N],q[N]; int n,T; Point operator - (Point A,Point B) {return Point(A.x-B.x,A.y-B.y);} double operator ^ (Point A,Point B) {return A.x*B.y-A.y*B.x;} Point operator & (Line A,Line B) {Point C=A.s;double t=((A.s-B.s)^(B.s-B.e))/((A.s-A.e)^(B.s-B.e));C.x+=(A.e.x-A.s.x)*t; C.y+=(A.e.y-A.s.y)*t;return C; } bool Isf() // 判断给出的点是否是逆时针的 {double res=0;for(int i=2;i<n;i++) res+=((p[i]-p[1])^(p[i+1]-p[1]));return res>eps; } bool check(Line a,Line b,Line c) // 判断 a,b的交点是否在c的左侧包括线上 {Point d=a&b; return ((d-c.s)^(c.e-c.s))<eps; } int from(Line a) // up left down right {Point A=a.e-a.s;if(A.x==0&&A.y>0) return 1;else if(A.x<0&&A.y==0) return 2;else if(A.x==0&&A.y<0) return 3;else return 4; } bool cmp(Line a,Line b) {int f1=from(a),f2=from(b);if(f1!=f2) return f1<f2;return ((a.s-b.s)^(b.e-b.s))<eps; } bool solve() {sort(l+1,l+n+1,cmp); int top=1;for(int i=2;i<=n;i++) if(from(l[i])!=from(l[top])) l[++top]=l[i];Line up,left,right,down;up=l[1];left=l[2];down=l[3];right=l[4]; //printf(" up : (%.2lf,%.2lf) -> (%.2lf,%.2lf)\n",l[1].s.x,l[1].s.y,l[1].e.x,l[1].e.y); //printf(" left : (%.2lf,%.2lf) -> (%.2lf,%.2lf)\n",l[2].s.x,l[2].s.y,l[2].e.x,l[2].e.y); //printf(" down : (%.2lf,%.2lf) -> (%.2lf,%.2lf)\n",l[3].s.x,l[3].s.y,l[3].e.x,l[3].e.y); //printf(" right : (%.2lf,%.2lf) -> (%.2lf,%.2lf)\n",l[4].s.x,l[4].s.y,l[4].e.x,l[4].e.y); //printf(" up : (%.2lf,%.2lf)\n",up.x,up.y); //printf(" left : (%.2lf,%.2lf)\n",left.x,left.y); //printf(" down : (%.2lf,%.2lf)\n",down.x,down.y); //printf(" right : (%.2lf,%.2lf)\n",right.x,right.y);if(up.s.x-down.s.x<-eps)return 0;if(left.s.y-right.s.y<-eps) return 0;return 1; } int main() {while(scanf("%d",&n)&&n){T++; for(int i=1;i<=n;i++){double x,y;scanf("%lf%lf",&x,&y);p[i]=Point(x,y);}if(!Isf()) for(int i=1;i<=(n>>1);i++) swap(p[i],p[n-i+1]);p[n+1]=p[1]; for(int i=1;i<=n;i++) l[i]=Line(p[i],p[i+1]);printf("Floor #%d\n",T);if(solve()) puts("Surveillance is possible."); else puts("Surveillance is impossible.");putchar('\n');}return 0; } /* bian8 1 0 1 1 0 1 0 3 1 3 1 2 2 2 2 0dian8 1 1 0 1 0 2 1 2 1 1 2 1 2 0 1 0*/
转载于:https://www.cnblogs.com/lxy8584099/p/10421746.html
POJ 1474 Video Surveillance相关推荐
- poj 1474 Video Surveillance - 求多边形有没有核
/* poj 1474 Video Surveillance - 求多边形有没有核*/ #include <stdio.h> #include<math.h> const do ...
- POJ 1474 Video Surveillance(半平面交)
题意:半平面交求多边形内核(我明明及的我之前是会用kuangbin第一份版平面交的,现在怎么就不会用了呢,补第二份代码) 代码: #include<cstdio> #include< ...
- POJ 1474 Video Surveillance(半平面交)
思路:半平面交裸题,要注意是顺时针给点. #include<iostream> #include<cstdio> #include<cstring> #includ ...
- ZTE Unveils World's First WiMAX Mobile Video Surveillance Terminal
asy to install WiMAX device ideal for deployment in strategic public areas 08 January 2009, Shenzhen ...
- Camera Vision - video surveillance on C#
http://www.codeproject.com/KB/audio-video/cameraviewer.aspx 开发的资源 介绍: 纵观当今的监控系统的发展趋势,能很容易发现基于IP的解决方案 ...
- VSAM:视频监控系统 A System for Video Surveillance and Monitoring
VSAM(VideoSurveillance and Monitoring)视频监控系统 Robotics Institute CMU 1:引言 2:试验床介绍 3:基本的视频分析算法:运动目标检测, ...
- POJ 计算几何入门题目推荐
其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专 ...
- [Z]POJ 计算几何入门题目推荐[转PKKJ]
http://www.cnblogs.com/eric-blog/archive/2011/05/31/2064785.html http://hi.baidu.com/novosbirsk/blog ...
- poj计算几何题推荐
POJ 计算几何入门题目推荐(转) 其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的 ...
最新文章
- Java Applet读写client串口——终极篇
- jupyter notebook的链接密码 token查询 以及 pycharm 如何使用 jupyter notebook
- python数据库在哪_python可以用哪些数据库
- P3085 [USACO13OPEN]Yin and Yang G 点分治
- 一个切图仔的 CSS 笔记
- 制作 Windows8 to Go
- 单行文本与多行文本省略文本
- JavaEE基础(01):Servlet实现方式,生命周期执行过程
- 1043. 输出PATest(20)-PAT乙级真题
- [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
- Cesium:加载本地高程/地形数据
- Python网络爬虫第一弹《Python网络爬虫相关基础概念》
- 稳健估计,P范数最小法
- 投稿选刊必备,2021较全的国内SCI期刊汇总整理
- PPT的配色方法(师从于珞珈老师)
- SAP库存--历史库存相关数据,以及库存变化对应表的数据变化,可以用于库龄分析报表逻辑设计。
- 非计算机专业学生怎么走上计算机技术之路?
- Py遇到Bad key “text.kerning_factor“ on line 4 in
- Macbook百度网盘不限速下载
- dubbo的常用容错机制
热门文章
- GT1030和730哪个好?GT1030与GT730区别对比 (全文)
- c语言 浮点数的加减乘除,浮点数的加减乘除运算步骤
- 像素游戏的动态图设计01
- php socket read参数,PHP里的socket_read和socket_recv
- [汇编语言]DOS下的dubug的标志位的英文全名(助记忆)
- x86能代替power pc架构吗_你是愿意为x86打工一辈子,还是用上自己的POWER平台?...
- 语气词、拟声词、动作与哭、量词、标点、特殊的符号
- Android 添加水印相册
- Java——JLabel文本
- 百度生成式AI产品文心一言邀请测试,五大场景、五大能力革新生产力工具