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 ;
}
原文地址:https://www.cnblogs.com/xiaohongmao/p/2621339.html