//判断直线有无交点
//斜率相同再判断点是否在直线上
//或一个
#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;
}