zoukankan      html  css  js  c++  java
  • poj 1269 Intersecting Lines

    //判断直线有无交点
    //斜率相同再判断点是否在直线上
    //或一个
    #include<stdio.h>
    #include<math.h>
    #define eps 1e-8
    #define zero(x)(((x)>0 ? (x):(-x))<eps)
    struct Point
    {
        double x,y;
    };
    
    struct Line
    {
        Point a,b;
    }line1,line2;
    double xmult(Point p1,Point p2,Point p0)
    {
        return((p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y));
    }
    double dmult(Point p1,Point p2,Point p0)//p0p1•p0p2点积
    {
        return (p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y);
    }
    int slope(Line line1,Line line2)
    {
        if(fabs((line1.a.y-line1.b.y)*(line2.a.x-line2.b.x)-
                (line2.a.y-line2.b.y)*(line1.a.x-line1.b.x))<eps)
        return 1;
        return 0;
    }
    
    /*int dot_online_in(Point p,Line l)
    {
        return zero(xmult(p,l.a,l.b))&&dmult(l.a,l.b,p)<eps;
    }*/
    int dot_online_in(Point p,Line l) //判点是否在线段上,包括端点
    {                  //叉积判断是否在直线上
        //printf("%d
    %lf
    ",zero(xmult(p,l.a,l.b)),dmult(l.a,l.b,p));
        //return zero(xmult(p,l.a,l.b))&&(l.a.x-p.x)*(l.b.x-p.x)<eps&&(l.a.y-p.y)*(l.b.y-p.y)<eps;
        return zero(xmult(p,l.a,l.b));//&&dmult(l.a,l.b,p)<eps; //等价
    }
    
    Point intersection(Line u,Line v)
    {
        Point ret=u.a;
        double t=((u.a.x-v.a.x)*(v.a.y-v.b.y)-(u.a.y-v.a.y)*(v.a.x-v.b.x))
                /((u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x));
        ret.x+=(u.b.x-u.a.x)*t;
        ret.y+=(u.b.y-u.a.y)*t;
        return ret;
    }
    
    int main()
    {
        int _case;
        int i,j,k;
        scanf("%d",&_case);
        printf("INTERSECTING LINES OUTPUT
    ");
        for(i=0;i<_case;i++)
        {
            scanf("%lf%lf%lf%lf",&line1.a.x,&line1.a.y,&line1.b.x,&line1.b.y);
            scanf("%lf%lf%lf%lf",&line2.a.x,&line2.a.y,&line2.b.x,&line2.b.y);
            if(slope(line1,line2))
            {
                if(dot_online_in(line1.a,line2))
                {
                    printf("LINE
    ");
                }
                else
                {
                    printf("NONE
    ");
                }
            }
            else
            {
                Point ans=intersection(line1,line2);
                printf("POINT %.2lf %.2lf
    ",ans.x,ans.y);
            }
        }
        printf("END OF OUTPUT
    ");
        return 0;
    }
  • 相关阅读:
    PJSUA2开发文档--第五章 帐户(号)Accounts
    PJSUA2开发文档--第四章 端点ENDPOINT
    PJSUA2开发文档--第三章 PJSUA2高级API
    PJSIP 自动化测试工具安装 Python安装
    pjsip 播放音视频
    TTS 文字转语音 ekho
    使用 pjsip 代码独立开发
    windows网络编程中文 笔记(二)
    coTurn测试程序之 turnutils_uclient
    coTurn测试程序之turnutils_stunclient.exe
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3209086.html
Copyright © 2011-2022 走看看