Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 14477 | Accepted: 6388 |
Description
Your program will repeatedly read in four points that define two lines in the x-y plane and determine how and where the lines intersect. All numbers required by this problem will be reasonable, say between -1000 and 1000.
Input
Output
Sample Input
5 0 0 4 4 0 4 4 0 5 0 7 6 1 0 2 3 5 0 7 6 3 -6 4 -3 2 0 2 27 1 5 18 5 0 3 4 0 1 2 2 5
Sample Output
INTERSECTING LINES OUTPUT POINT 2.00 2.00 NONE LINE POINT 2.00 5.00 POINT 1.07 2.20END OF OUTPUT
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; struct node { double x1, y1, x2, y2; }p[4]; int main() { int t; scanf("%d", &t); printf("INTERSECTING LINES OUTPUT\n"); while(t--) { scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&p[1].x1, &p[1].y1, &p[1].x2, &p[1].y2, &p[2].x1, &p[2].y1, &p[2].x2, &p[2].y2); if(p[1].x1-p[1].x2!=0&&p[2].x1-p[2].x2!=0) { double k1=(p[1].y1-p[1].y2)/(p[1].x1-p[1].x2), k2=(p[2].y1-p[2].y2)/(p[2].x1-p[2].x2); double b1=p[1].y1-k1*p[1].x1, b2=p[2].y1-k2*p[2].x1; if(k1==k2&&b1!=b2) { printf("NONE\n"); } else if(k1==k2&&b1==b2) { printf("LINE\n"); } else { double x=(b2-b1)/(k1-k2); double y=k1*x+b1; printf("POINT %.2f %.2f\n",x,y); } } else if(p[1].x1-p[1].x2==0&&p[2].x1-p[2].x2==0) { if(p[1].x1==p[2].x1) { printf("LINE\n"); } else { printf("NONE\n"); } } else if(p[1].x1-p[1].x2!=0&&p[2].x1-p[2].x2==0) { double k1=(p[1].y1-p[1].y2)/(p[1].x1-p[1].x2); double b1=p[1].y1-k1*p[1].x1; double y=p[2].x1*k1+b1; printf("POINT %.2f %.2f\n",p[2].x1,y); } else if(p[1].x1-p[1].x2==0&&p[2].x1-p[2].x2!=0) { double k2=(p[2].y1-p[2].y2)/(p[2].x1-p[2].x2); double b2=p[2].y1-k2*p[2].x1; double y=p[1].x1*k2+b2; printf("POINT %.2f %.2f\n",p[1].x1,y); } } printf("END OF OUTPUT\n"); return 0; }