POJ 1269 Intersecting Lines

http://poj.org/problem?id=1269

两条直线,平行输出NONE,共线输出LINE,相交输出交点坐标

p0为交点,求交点坐标的方法是(p1-p0)X(p2-p0)=0 &&  (p3-p0)X(p4-p0)=0(其中X代表向量叉乘),联立两个方程可求解

求得解分母为0时,判断一条直线中的一个点是否在另一条直线上(用上面叉乘的方法),如果是就共线,反之平行

View Code
#include <iostream>

#include <stdio.h>

using namespace std ;

struct point{

    int x,y ;

} ;

int main()

{

    int n ;

    while(~scanf("%d",&n))

    {

        puts("INTERSECTING LINES OUTPUT") ;

        point p1,p2,p3,p4 ;

        for(int i=0;i<n;i++)

        {

            scanf("%d%d%d%d%d%d%d%d",&p1.x,&p1.y,&p2.x,&p2.y,&p3.x,&p3.y,&p4.x,&p4.y) ;

            if((((p3.y-p4.y)*(p2.x-p1.x)-(p1.y-p2.y)*(p4.x-p3.x))==0 || ((p1.y-p2.y)*(p4.x-p3.x)-(p3.y-p4.y)*(p2.x-p1.x))==0) && ((p3.y-p4.y)*p1.x+(p4.x-p3.x)*p1.y+p3.x*p4.y-p4.x*p3.y==0))

            {

                puts("LINE") ;

                continue ;

            }

            if(((p3.y-p4.y)*(p2.x-p1.x)-(p1.y-p2.y)*(p4.x-p3.x))==0 || ((p1.y-p2.y)*(p4.x-p3.x)-(p3.y-p4.y)*(p2.x-p1.x))==0)

            {

                puts("NONE") ;

                continue ;

            }

            double x0=((p1.x*p2.y-p2.x*p1.y)*(p4.x-p3.x)-(p3.x*p4.y-p4.x*p3.y)*(p2.x-p1.x))*1.0/((p3.y-p4.y)*(p2.x-p1.x)-(p1.y-p2.y)*(p4.x-p3.x)) ;

            double y0=((p3.y-p4.y)*(p1.x*p2.y-p2.x*p1.y)-(p1.y-p2.y)*(p3.x*p4.y-p4.x*p3.y))*1.0/((p1.y-p2.y)*(p4.x-p3.x)-(p3.y-p4.y)*(p2.x-p1.x)) ;

            printf("POINT %.2lf %.2lf\n",x0,y0) ;

        }

        puts("END OF OUTPUT") ;

    }

    return 0 ;

}

 

你可能感兴趣的:(intersect)