zoukankan      html  css  js  c++  java
  • zoj 2870 Segments 线段与直线相交

    找到一条直线,与全部线段都相交。直线由线段中的两个端点组成,所以枚举一下就好了。

    #include<bits/stdc++.h>
    using namespace std;
    const double eps=1e-8;
    struct point
    {
        double x,y;
    } a[1024];
    
    double cross(point a,point b)
    {
        return a.x*b.y-b.x*a.y;
    }
    point operator -(point a,point b)
    {
        point c;
        c.x=a.x-b.x;
        c.y=a.y-b.y;
        return c;
    }
    
    double dot(point a,point  b)
    {
        double t=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
        return  t;
    }
    int main()
    {
        int _,i,flag,u,v,j,n;
        double t;
        scanf("%d",&_);
        while(_--)
        {
            scanf("%d",&n);
            for(i=0; i<n; i++)
                scanf("%lf %lf %lf %lf",&a[i].x,&a[i].y,&a[i+n].x,&a[i+n].y);
            if(n<=2) flag=1;
            else
            {
                flag=0;
                for(u=0; u<2*n; u++)
                {
                    for(v=u+1; v<2*n; v++)
                    {
                        if(dot(a[u],a[v])<eps) continue;
                        for(i=0; i<n; i++)
                        {
                            t=cross(a[i]-a[u],a[v]-a[u])*cross(a[v]-a[u],a[i+n]-a[u]);
                            if(t>=0) continue;
                            else break;
                        }
                        if(i>=n) flag=1;
                        if(flag) break;
                    }
                    if(flag) break;
                }
            }
    
            if(flag==1) printf("Yes!
    ");
            else printf("No!
    ");
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    【24点游戏】cocos2dx 源码
    『Python题库
    『Python题库
    【python安装】Windows上安装和创建python开发环境
    『Linux基础
    『Linux基础
    『Linux基础
    『Linux基础
    『Linux基础
    『Python基础-14』匿名函数 `lambda`
  • 原文地址:https://www.cnblogs.com/xryz/p/4847799.html
Copyright © 2011-2022 走看看