zoukankan      html  css  js  c++  java
  • poj 1474 Video Surveillance

    /*
    poj 1474 Video Surveillance - 求多边形有没有核
    
    
    
    */
    #include <stdio.h>
    #include<math.h>
    const double eps=1e-8;
    const int N=103;
    struct point
    {
        double x,y;
    }dian[N];
    inline bool mo_ee(double x,double y)
    {
    	double ret=x-y;
    	if(ret<0) ret=-ret;
    	if(ret<eps) return 1;
    	return 0;
    }
    inline bool mo_gg(double x,double y)  {   return x > y + eps;} // x > y
    inline bool mo_ll(double x,double y)  {   return x < y - eps;} // x < y
    inline bool mo_ge(double x,double y) {   return x > y - eps;} // x >= y
    inline bool mo_le(double x,double y) {   return x < y + eps;} 	// x <= y
    inline double mo_xmult(point p2,point p0,point p1)//p1在p2左返回负,在右边返回正
    {
        return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
    }
    
    point mo_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;
    }
    /////////////////////////
    
    //切割法求半平面交
    point mo_banjiao_jiao[N*2];
    point mo_banjiao_jiao_temp[N*2];
    void mo_banjiao_cut(point *ans,point qian,point hou,int &nofdian)
    {
    	int i,k;
    	for(i=k=0;i<nofdian;++i)
    	{
    		double a,b;
    		a=mo_xmult(hou,ans[i],qian);
    		b=mo_xmult(hou,ans[(i+1)%nofdian],qian);
    		if(mo_le(a,0))//顺时针就是<=0
    		{
    			mo_banjiao_jiao_temp[k++]=ans[i];
    		}if(mo_ll(a*b,0))
    		{
    			mo_banjiao_jiao_temp[k++]=mo_intersection(qian,hou,ans[i],ans[(i+1)%nofdian]);
    		}
    	}
    	for(i=0;i<k;++i)
    	{
    		ans[i]=mo_banjiao_jiao_temp[i];
    	}
    	nofdian=k;
    }
    int mo_banjiao(point *dian,int n)
    {
    	int i,nofdian;
    	nofdian=n;
    	for(i=0;i<n;++i)
    	{
    		mo_banjiao_jiao[i]=dian[i];
    	}
    	for(i=0;i<n;++i)//i从0开始
    	{
    		mo_banjiao_cut(mo_banjiao_jiao,dian[i],dian[(i+1)%n],nofdian);
    		if(nofdian==0)
    		{
    			return nofdian;
    		}
    	}
    	return nofdian;
    }
    /////////////////////////
    int main()
    {
        int t,i,n,iofcase=1;
        while(scanf("%d",&n),n)
        {
            
            for(i=0;i<n;++i)
            {
                scanf("%lf%lf",&dian[i].x,&dian[i].y);
            }
            int ret=mo_banjiao(dian,n);
            if(ret==0)
            {
    			printf("Floor #%d
    ",iofcase++);
                printf("Surveillance is impossible.
    
    ");
            }else
            {
                printf("Floor #%d
    ",iofcase++);
                printf("Surveillance is possible.
    
    ");
            }
        }
        return 0;
    }


  • 相关阅读:
    为jquery添加扩展标准思路
    linux 相关命令
    通过设置PHPSESSID保存到cookie实现免登录
    CentOs7 配置nfs 系统
    ajax 异步 跨域上传图片
    php下载并安装pear脚本
    php基于swoole扩展的WebSocket
    php冒泡排序
    微信公众号验证TOKEN
    CSS清浮动处理(Clear与BFC)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3249335.html
Copyright © 2011-2022 走看看