POJ 1474 Video Surveillance 半平面交

和POJ 3130,POJ 3335一样。求多边形的核

#include <iostream>
#include <cstdio>
#include <cmath>
#define eps 1e-18
using namespace std;

const int MAXN = 105;
double a, b, c;
int n, cnt;

struct Point
{
    double x, y;
}point[MAXN], p[MAXN], tp[MAXN];

void Get_equation(Point p1, Point p2)
{
    a = p2.y - p1.y;
    b = p1.x - p2.x;
    c = p2.x * p1.y - p1.x * p2.y;
}

Point Intersection(Point p1, Point p2)
{
    double u = fabs(a * p1.x + b * p1.y + c);
    double v = fabs(a * p2.x + b * p2.y + c);
    Point t;
    t.x = (p1.x * v + p2.x * u) / (u + v);
    t.y = (p1.y * v + p2.y * u) / (u + v);
    return t;
}

void Cut()
{
    int tmp = 0;
    for(int i=1; i<=cnt; i++)
    {
        //顺时针是>-eps和>eps,逆时针是<eps和<-eps
        if(a * p[i].x + b * p[i].y + c > -eps) tp[++tmp] = p[i];
        else
        {
            if(a * p[i-1].x + b * p[i-1].y + c > eps)
                tp[++tmp] = Intersection(p[i-1], p[i]);
            if(a * p[i+1].x + b * p[i+1].y + c > eps)
                tp[++tmp] = Intersection(p[i], p[i+1]);
        }
    }
    for(int i=1; i<=tmp; i++)
        p[i] = tp[i];
    p[0] = p[tmp];
    p[tmp+1] = p[1];
    cnt = tmp;
}

void solve()
{
    for(int i=1; i<=n; i++)
        p[i] = point[i];
    point[n+1] = point[1];
    p[0] = p[n];
    p[n+1] = p[1];
    cnt = n;
    for(int i=1; i<=n; i++)
    {
        Get_equation(point[i], point[i+1]);
        Cut();
    }
}

int main()
{
    int Case = 0;
    while(~scanf("%d", &n) && n)
    {
        for(int i=1; i<=n; i++)
            scanf("%lf%lf", &point[i].x, &point[i].y);
        solve();
        printf("Floor #%d\nSurveillance is %spossible.\n\n", ++Case, cnt>0? "":"im");
    }
    return 0;
}
时间: 2024-10-27 13:49:06

POJ 1474 Video Surveillance 半平面交的相关文章

POJ 1474 Video Surveillance 半平面交求多边形是否有核

裸的半平面交求多边形是否有核. 多边形的核: 在多边形核上的点可以看到多边形的所有顶点,凸多边形的核显然就是多边形本身. 多边形的核是一个凸包,对多边形的所有边都做向着多边形的半平面交在判断一下是否构成凸包就可以了 一样的题目还有POJ3335 Video Surveillance Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3438   Accepted: 1523 Description A friend of y

POJ 1474 Video Surveillance 半平面交求多边形内核存在性

题目大意:一个楼有很多层,每一层是一个多多边形,问每一层是否有点能够看到这一层的全貌. 思路:半平面交解多边形内核存在性,裸题.题中怎么没写数据范围?..让我还re几次.. CODE: #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 3010 #define EPS 1e-8 #de

poj 1474 Video Surveillance (半平面交)

链接:http://poj.org/problem?id=1474 Video Surveillance Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3247   Accepted: 1440 Description A friend of yours has taken the job of security officer at the Star-Buy Company, a famous depart- ment

POJ1474 Video Surveillance(半平面交)

很多道相似的半平面交,但只过了这个,心都碎了.. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 7

poj1474Video Surveillance(半平面交)

链接 半平面交的模板题,判断有没有核.: 注意一下最后的核可能为一条线,面积也是为0的,但却是有的. 1 #include<iostream> 2 #include <stdio.h> 3 #include <math.h> 4 #define eps 1e-8 5 using namespace std; 6 const int MAXN=210; 7 int m; 8 double r; 9 int cCnt,curCnt;//此时cCnt为最终切割得到的多边形的顶

poj 3384 Feng Shui 半平面交的应用 求最多覆盖凸多边形的面积的两个圆 的圆心坐标

题目来源: http://poj.org/problem?id=3384 分析: 用半平面交将多边形的每条边一起向"内"推进R,得到新的多边形(半平面交),然后求多边形的最远两点. 代码如下: const double EPS = 1e-10; const int Max_N = 105 ; struct Point{ double x,y; Point(){} Point(double x, double y):x(x),y(y){} Point operator - (Point

POJ 2451 nlog(n)半平面交裸题。

前言       最近学习C#,不过好在当初考计算机二级学习过C++,刚上手没有对C#感到很恐惧.C#视频也看了几天 了,总感觉不总结一下心里没底,现在跟着我从头走进C#之旅吧.     C#是以后总面向对象的编程语言(OOP),C#是从C和C++派生出来的,主要用于开发可以运行在.NET平台 上的应用程序.随着.NET的发展,C#语言简单.现代.面向对象和类型安全显示了一定的优势.     下面我就介绍一些初学者不太理解的一些东西.   C#有以下突出的特点       (1)语法简洁.不允许

POJ 1279 Art Gallery 半平面交求多边形核

第一道半平面交,只会写N^2. 将每条边化作一个不等式,ax+by+c>0,所以要固定顺序,方便求解. 半平面交其实就是对一系列的不等式组进行求解可行解. 如果某点在直线右侧,说明那个点在区域内,否则出现在左边,就可能会有交点,将交点求出加入. //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h> #include <iostream> #inc

POJ 1279 Art Gallery 半平面交+求多边形核的面积

裸的:半平面交+求多边形核的面积 Art Gallery Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5735   Accepted: 2419 Description The art galleries of the new and very futuristic building of the Center for Balkan Cooperation have the form of polygons (not