题目链接:http://poj.org/problem?id=1269
题目大意:题目给出四个点,前面两点和后面两点共确定两条直线,判断两条直线共线、平行、交点。
代码:
#include<iostream>
#include<cstdio>
using namespace std;
typedef struct{///点(x,y)
int x,y;
}Point;
typedef struct{///直线 ax+by+c=0
int a,b,c;
}Line;
int JugLine(int x1,int y1,int x2,int y2){
return x1*y2-x2*y1;
///结果为0时,向量平行
///非0,可以作为组成平行四边形面积
}
Line lineform(Point a,Point b){
Line t;
t.a=b.y-a.y;
t.b=a.x-b.x;
t.c=b.x*a.y-a.x*b.y;
return t;///返回两点构成的直线
}
double x,y;///两直线交点(x,y)
void lineintersect(Line l1,Line l2){
double d= l1.a * l2.b - l2.a * l1.b ;
x = ( l2.c * l1.b - l1.c * l2.b ) / d ;
y = ( l2.a * l1.c - l1.a * l2.c ) / d ;
}
int main(){
int ca;
Point p1,p2,p3,p4;
Line l1,l2;
scanf("%d",&ca);
printf("INTERSECTING LINES OUTPUT\n");
while(ca--){
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(JugLine(p2.x-p1.x,p2.y-p1.y,p3.x-p1.x,p3.y-p1.y)==0&&JugLine(p2.x-p1.x,p2.y-p1.y,p4.x-p1.x,p4.y-p1.y)==0)
printf("LINE\n");
else if(JugLine(p2.x-p1.x,p2.y-p1.y,p4.x-p3.x,p4.y-p3.y)==0)
printf("NONE\n");
else{
l1=lineform(p1,p2);
l2=lineform(p3,p4);
lineintersect(l1,l2);
printf("POINT %.2lf %.2lf\n",x,y);
}
}
printf("END OF OUTPUT\n");
return 0;
}