POJ 1474 Video Surveillance 半平面交求多邊形核心存在性

來源:互聯網
上載者:User

標籤:poj   計算幾何   半平面交   多邊形核心   

題目大意:一個樓有很多層,每一層是一個多多邊形,問每一層是否有點能夠看到這一層的全貌。


思路:半平面交解多邊形核心存在性,裸題。題中怎麼沒寫資料範圍?。。讓我還re幾次。。


CODE:

#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define MAX 3010#define EPS 1e-8#define DCMP(a) (fabs(a) < EPS)using namespace std;struct Point{double x,y;Point(double _ = .0,double __ = .0):x(_),y(__) {}Point operator +(const Point &a)const {return Point(x + a.x,y + a.y);}Point operator -(const Point &a)const {return Point(x - a.x,y - a.y);}Point operator *(double a)const {return Point(x * a,y * a);}void Read() {scanf("%lf%lf",&x,&y);}}point[MAX],p[MAX];struct Line{Point p,v;double alpha;Line(Point _,Point __):p(_),v(__) {alpha = atan2(v.y,v.x);}Line() {}bool operator <(const Line &a)const {return alpha < a.alpha;}}line[MAX],q[MAX];int points;int lines;inline void Initialize(){lines = 0;}inline void MakeLine(const Point &a,const Point &b){line[++lines] = Line(a,b - a);}inline double Cross(const Point &a,const Point &b){return a.x * b.y - a.y * b.x;}inline bool OnLeft(const Line &l,const Point &p){return Cross(l.v,p - l.p) >= 0;}inline Point GetIntersection(const Line &a,const Line &b){Point u = a.p - b.p;double temp = Cross(b.v,u) / Cross(a.v,b.v);return a.p + a.v * temp;}inline bool HalfPlaneIntersection(){int front = 1,tail = 1;q[1] = line[1];for(int i = 2;i <= lines; ++i) {while(front < tail && !OnLeft(line[i],p[tail - 1]))--tail;while(front < tail && !OnLeft(line[i],p[front]))++front;if(DCMP(Cross(line[i].v,q[tail].v)))q[tail] = OnLeft(line[i],q[tail].p) ? q[tail]:line[i];elseq[++tail] = line[i];if(front < tail)p[tail - 1] = GetIntersection(q[tail],q[tail - 1]);}while(front < tail && !OnLeft(q[front],p[tail - 1]))--tail;if(tail - front <= 1)return false;return tail > front;}int main(){while(scanf("%d",&points),points) {Initialize();for(int i = 1;i <= points; ++i)point[i].Read();for(int i = points;i > 1; --i)MakeLine(point[i],point[i - 1]);MakeLine(point[1],point[points]);sort(line + 1,line + lines + 1);bool ans = HalfPlaneIntersection();static int T = 0;printf("Floor #%d\n",++T);if(ans)puts("Surveillance is possible.\n");elseputs("Surveillance is impossible.\n");}return 0;}


POJ 1474 Video Surveillance 半平面交求多邊形核心存在性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.