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\n%lf\n",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\n");
    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\n");
            }
            else
            {
                printf("NONE\n");
            }
        }
        else
        {
            Point ans=intersection(line1,line2);
            printf("POINT %.2lf %.2lf\n",ans.x,ans.y);
        }
    }
    printf("END OF OUTPUT\n");
    return 0;
}

 

你可能感兴趣的:(intersect)