pku 1269 (平面两直线的位置关系)

pku 1269 (平面两直线的位置关系)

直接用直线方程Ax+By+C=0来判断的

Source Code

Problem: 
1269   User: Torres 
Memory: 196K  Time: 0MS 
Language: C
++   Result: Accepted 

Source Code 
#include
< iostream >
#include
< cmath >
using   namespace  std;
typedef 
struct  point {
    
double x,y;
    point(
double a=0,double b=0)
    
{x=a;y=b;}
}
point;
typedef 
struct  line {
    
double A,B,C;
    line(point a,point b)
    
{
        A
=-(b.y-a.y);
        B
=b.x-a.x;
        C
=a.x*(b.y-a.y)-a.y*(b.x-a.x);
    }

}
line;
point l12;
// 要求的交点
int  isintersect(line l1,line l2)
{
    
if(l1.A*l2.B==l2.A*l1.B){
        
if(l1.A==0&&l2.A==0&&l1.C*l2.B==l2.C*l1.B||
            l1.B
==0&&l2.B==0&&l1.C*l2.A==l2.C*l1.A)
            
return 1;
        
else if(l1.A!=0&&l2.B!=0&&l1.B*l2.C==l1.C*l2.B)return 1;
        
else return -1;
    }

    
else {
        l12.x
=(l2.B*l1.C-l1.B*l2.C)/(l2.A*l1.B-l1.A*l2.B);
        l12.y
=(l2.A*l1.C-l1.A*l2.C)/(l1.A*l2.B-l2.A*l1.B);
        
return 0;
    }

}

int  main()
{
    
int ca;
    point s1,e1,s2,e2;
    
//freopen("in.txt","r",stdin);

    scanf(
"%d",&ca);
        printf(
"INTERSECTING LINES OUTPUT\n");
    
while(ca--){
        scanf(
"%lf%lf%lf%lf",&s1.x,&s1.y,&e1.x,&e1.y);
        scanf(
"%lf%lf%lf%lf",&s2.x,&s2.y,&e2.x,&e2.y);
        line l1(s1,e1),l2(s2,e2);
        
int flag=isintersect(l1,l2);
        
if(flag==-1)printf("NONE\n");
        
else if(flag==1)printf("LINE\n");
        
else printf("POINT %.2lf %.2lf\n",l12.x,l12.y);
    }

    printf(
"END OF OUTPUT\n");
    
return 0;
}


你可能感兴趣的:(pku 1269 (平面两直线的位置关系))