#include <cmath>
#include <iostream>
#include <stdio.h>
#define INF 1000000000
using namespace std;
int n;
int c=1;
double m1,m2,d,d1,d2,x1,x2,x3,x4,y_1,y2,y3,y4,c1,c2;
double px,py;
void intersect()
{
if(x1!=x2)
{
m1=((y_1-y2)/(x1-x2));
}
else
{
m1=INF;
}
if(x3!=x4)
m2=(y3-y4)/(x3-x4);
else
m2=INF;
if(m1==INF)
c1=0;
else
c1=y_1-m1*x1;
if(m2==INF)
c2=0;
else
c2=y3-m2*x3;
if(m1==INF)
{
px=x1;
if(m2==0)
{
py=y3;
printf("POINT %.2lf %.2lf\n",px,py);
return;
}
else
{
py=m2*px+c2;
printf("POINT %.2lf %.2lf\n",px,py);
return;
}
}
if(m2==INF)
{
px=x3;
if(m1==0)
{
py=y_1;
printf("POINT %.2lf %.2lf\n",px,py);
return;
}
else
{
py=m1*px+c1;
printf("POINT %.2lf %.2lf\n",px,py);
return;
}
}
if(m1==0)
{
py=y_1;
if(m2==INF)
{
px=x3;
printf("POINT %.2lf %.2lf\n",px,py);
return;
}
else
{
px=(py-c2)/m2;
printf("POINT %.2lf %.2lf\n",px,py);
return;
}
}
if(m2==0)
{
py=y3;
if(m1==INF)
{
px=x1;
printf("POINT %.2lf %.2lf\n",px,py);
return;
}
else
{
px=(py-c1)/m1;
printf("POINT %.2lf %.2lf\n",px,py);
return;
}
}
if(m1!=m2)
{
px=-(c1-c2)/(m1-m2);
py=m1*px+c1;
printf("POINT %.2lf %.2lf\n",px,py);
}
}
int main()
{
cin>>n;
cout<<"INTERSECTING LINES OUTPUT\n";
while(n--)
{
cin>>x1>>y_1>>x2>>y2>>x3>>y3>>x4>>y4;
/*
comparing the slopes of the st. line x1y1-x2y2, x3y3-x4y4,
st. line x1y1-x3y3, x2y2-x4y4,
st. line x1y1-x4y4, x2y2-x3y3,
*/
d=(y_1-y2)*(x3-x4)-(y3-y4)*(x1-x2);
d1=(y_1-y3)*(x2-x4)-(y2-y4)*(x1-x3);
d2=(y_1-y4)*(x2-x3)-(y2-y3)*(x1-x4);
if(d==0 && d1==0 && d2==0)
{
cout<<"LINE\n";
continue;
}
else if(d==0)
{
cout<<"NONE\n";
continue;
}
else
{
intersect();
}
}
cout<<"END OF OUTPUT\n";
return 0;
}
Another approach:
(but gives wa)
#include<stdio.h>
int main()
{
printf("INTERSECTING LINES OUTPUT\n");
int n,x_1,x_2,x_3,x_4,y_1,y_2,y_3,y_4;
double d,d1,d2,t1,t2,x,y;
scanf("%d",&n);
while(n>0)
{
scanf("%d%d%d%d%d%d%d%d",&x_1,&y_1,&x_2,&y_2,&x_3,&y_3,&x_4,&y_4);
d=(double)((x_1-x_2)*(y_3-y_4))-((y_1-y_2)*(x_3-x_4));
d1=(double)((x_3-x_4)*(y_3-y_1))-((y_3-y_4)*(x_3-x_1));
d2=(double)(-((x_3-x_1)*(y_1-y_2))+((y_3-y_1)*(x_1-x_2)));
if((int)d==0 && (int)d1==0 && (int)d2==0)
{
printf("LINE\n");
}
else if((int)d==0)
{
printf("NONE\n");
}
else
{
t1=d1/d;
t2=d2/d;
x=x_1+t1*(x_2-x_1);
y=y_1+t1*(y_2-y_1);
printf("POINT %.2lf %.2lf\n",x,y);
}
n--;
}
printf("END OF OUTPUT\n");
return 0;
}