poj 1474 半平面交求多边形的核
来源:互联网 发布:工商银行博士后 知乎 编辑:程序博客网 时间:2024/04/28 18:28
【题意】
是否能在房间中找到一个位置来安装摄像头,使摄像头能监控到房间的每个角落。在平面图上,房间的墙只有横和竖的,没有斜的。
【题解】
判断多边形是否存在核。用半平面交判断。
【代码】
#include <iostream>#include <cmath>#define eps 1e-8#define oo 1e5using namespace std;const int maxn=105;struct point{ double x,y;}p[maxn],tp[maxn];int n,nn;int sig(double x){ if (x<-eps) return -1; if (x>eps) return 1; return 0;}void getline(const point& p1,const point& p2,double & a,double & b,double & c){ a=p2.y-p1.y; b=p1.x-p2.x; c=p2.x*p1.y-p2.y*p1.x;}point intersection(point u1,point u2,point v1,point v2){ point ret=u1; double t=((u1.x-v1.x)*(v1.y-v2.y)-(u1.y-v1.y)*(v1.x-v2.x)) /((u1.x-u2.x)*(v1.y-v2.y)-(u1.y-u2.y)*(v1.x-v2.x)); ret.x+=(u2.x-u1.x)*t; ret.y+=(u2.y-u1.y)*t; return ret;}void cut(int& n,point* p,point l1,point l2){ double a,b,c; point pp[maxn]; int m=0,i; getline(l1,l2,a,b,c); for (i=0;i<n;i++) if (sig(a*p[i].x+b*p[i].y+c)>=0) pp[m++]=p[i]; else { int t=(i-1+n)%n; if (sig(a*p[t].x+b*p[t].y+c)>0) pp[m++]=intersection(p[t],p[i],l1,l2); t=(i+1)%n; if (sig(a*p[t].x+b*p[t].y+c)>0) pp[m++]=intersection(p[t],p[i],l1,l2); } for (i=0;i<m;i++) p[i]=pp[i]; n=m;}int main(){ freopen("pin.txt","r",stdin); freopen("pou.txt","w",stdout); int i,cc=0; while (1) { cin >> n; if (n==0) break; for (i=0;i<n;i++) cin >> p[i].x >> p[i].y; nn=4; tp[0].x=-oo;tp[0].y=oo; tp[1].x=oo;tp[1].y=oo; tp[2].x=oo;tp[2].y=-oo; tp[3].x=-oo;tp[3].y=-oo; for (i=0;i<n;i++) cut(nn,tp,p[i],p[(i+1)%n]); if (cc) cout << endl; cout << "Floor #" << ++cc << endl; if (nn<=0) cout << "Surveillance is impossible.\n"; else cout << "Surveillance is possible.\n"; } return 0;}
- poj 1474 半平面交求多边形的核
- POJ 3335 半平面交求多边形的核
- [poj 1474]Video Surveillance[半平面交][多边形的核]
- POJ 1474 多边形的核(半平面交)
- poj 1279 Art Gallery(求多边形核的面积+半平面交)
- POJ 1279 Art Gallery 半平面交+求多边形核的面积
- POJ 1474 Video Surveillance 半平面交求多边形是否有核
- 透彻解析半平面交求多边形的核模板
- 通过半平面交求多边形的核
- POJ 3335 半平面交与多边形的核
- POJ 3335 Rotating Scoreboard 半平面交求多边形内核
- POJ 3130 How I Mathematician Wonder What You Are!(半平面交求多边形的核)
- POJ 3130 How I Mathematician Wonder What You Are! & 3335 Rotating Scoreboard (半平面交求多边形的核)
- POJ 1474 Video Surveillance 半平面交求多边形内核存在性
- POJ 1279 Art Gallery(半平面交求多边形核)
- poj 1279 Art Gallery(半平面交求多边形核面积)
- 【PKU3525】半平面交二分求多边形核
- POJ1279/ZOJ1369 Art Gallery,POJ2451 Uyuw's Concert(半平面交求多边形的核)
- Android 反编译apk
- 最少硬币问题
- Android开发网上的一些重要知识点
- asp.net页面指定控件导出为Word 或excel 文档
- label bias problem
- poj 1474 半平面交求多边形的核
- CATransform3D-Cube
- HDFS1.0源代码解析—DataNode启动(一)
- 用usb安装ubuntu server 10.04(好像所有操作系统都能通过此方法安装)
- poj1523[割顶&连通分支数]
- 查看mysql表结构和表创建语句的方法
- 关于委托的简单认识
- Android 移植到C#
- 判断字节序的一个方法