// https://u...content-available-to-author-only...e.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=24&problem=314&mosmsg=Submission+received+with+ID+17243632
#include <stdio.h>
typedef struct{
double x;
double y;
}Point;
typedef struct{
Point from;
Point to;
}Line;
double ABS(double a){
if (a < 0){
return -a;
}
return a;
}
double getSlopeOfALine(Line line){
return (line.from.y - line.to.y) / (line.from.x - line.to.x);
}
double getAreaOfATriangle(Point A, Point B, Point C){
return ABS((A.x * (B.y - C.y) + B.x * (C.y - A.y) + C.x * (A.y - B.y))) / 2;
}
int are2LinesSame(Line line1, Line line2){
return getAreaOfATriangle(line1.from, line2.from, line2.to) == 0 && getAreaOfATriangle(line1.to, line2.from, line2.to) == 0;
}
int are2LinesParallel(Line line1, Line line2){
return getSlopeOfALine(line1) == getSlopeOfALine(line2);
}
void scanAPoint(Point* point){
scanf("%lf %lf", &point
->x
, &point
->y
); }
void scanALine(Line* line){
scanAPoint(&line->from);
scanAPoint(&line->to);
}
void scan2Lines(Line* line1, Line* line2){
scanALine(line1);
scanALine(line2);
}
Point getIntersectionPoint(Line line1, Line line2){
Point intersectionPoint;
double denominator = 0, nominatorX = 0, nominatorY = 0;
denominator = (line1.from.x - line1.to.x) * (line2.from.y - line2.to.y) - (line2.from.x - line2.to.x) * (line1.from.y - line1.to.y);
if (denominator == 0){
//DoesIntersect = 0;
}
else{
//DoesIntersect = 1;
nominatorX = (line1.from.x * line1.to.y - line1.to.x * line1.from.y) * (line2.from.x - line2.to.x) - /* (x1y2 - x2y1) X (x3 - x4)*/
(line2.from.x * line2.to.y - line2.to.x * line2.from.y) * (line1.from.x - line1.to.x); /* (x3y4 - x4y3) - (x1 - x2)*/
nominatorY = (line1.from.x * line1.to.y - line1.to.x * line1.from.y) * (line2.from.y - line2.to.y) - /* (x1y2 - x2y1) X (y3 - y4)*/
(line2.from.x * line2.to.y - line2.to.x * line2.from.y) * (line1.from.y - line1.to.y); /* (x3y4 - x4y3) - (y1 - y2)*/
intersectionPoint.x = nominatorX / denominator;
intersectionPoint.y = nominatorY / denominator;
}
return intersectionPoint;
}
void findAndPrintResult(Line line1, Line line2){
if (are2LinesSame(line1, line2)){
}
else if (are2LinesParallel(line1, line2)){
}
else{
Point intersectionPoint = getIntersectionPoint(line1, line2);
printf("POINT %.2f %.2f", intersectionPoint.
x, intersectionPoint.
y); }
}
int main(){
long int T = 0;
Line line1, line2;
#ifdef __FREOPEN__
freopen("378 - Intersecting Lines.in", "r", stdin
); freopen("378 - Intersecting Lines.out", "w", stdout
); #endif
printf("INTERSECTING LINES OUTPUT\n");
while (T--){
scan2Lines(&line1, &line2);
findAndPrintResult(line1, line2);
}
#ifdef __FREOPEN__
#endif
return 0;
}
Ly8gaHR0cHM6Ly91Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLm9yZy9pbmRleC5waHA/b3B0aW9uPWNvbV9vbmxpbmVqdWRnZSZJdGVtaWQ9OCZwYWdlPXNob3dfcHJvYmxlbSZjYXRlZ29yeT0yNCZwcm9ibGVtPTMxNCZtb3Ntc2c9U3VibWlzc2lvbityZWNlaXZlZCt3aXRoK0lEKzE3MjQzNjMyCgojaW5jbHVkZSA8c3RkaW8uaD4KCnR5cGVkZWYgc3RydWN0ewoJZG91YmxlIHg7Cglkb3VibGUgeTsKfVBvaW50OwoKdHlwZWRlZiBzdHJ1Y3R7CglQb2ludCBmcm9tOwoJUG9pbnQgdG87Cn1MaW5lOwoKZG91YmxlIEFCUyhkb3VibGUgYSl7CglpZiAoYSA8IDApewoJCXJldHVybiAtYTsKCX0KCglyZXR1cm4gYTsKfQoKZG91YmxlIGdldFNsb3BlT2ZBTGluZShMaW5lIGxpbmUpewoJcmV0dXJuIChsaW5lLmZyb20ueSAtIGxpbmUudG8ueSkgLyAobGluZS5mcm9tLnggLSBsaW5lLnRvLngpOwp9Cgpkb3VibGUgZ2V0QXJlYU9mQVRyaWFuZ2xlKFBvaW50IEEsIFBvaW50IEIsIFBvaW50IEMpewoJcmV0dXJuIEFCUygoQS54ICogKEIueSAtIEMueSkgKyBCLnggKiAoQy55IC0gQS55KSArIEMueCAqIChBLnkgLSBCLnkpKSkgLyAyOwp9CgppbnQgYXJlMkxpbmVzU2FtZShMaW5lIGxpbmUxLCBMaW5lIGxpbmUyKXsKCXJldHVybiBnZXRBcmVhT2ZBVHJpYW5nbGUobGluZTEuZnJvbSwgbGluZTIuZnJvbSwgbGluZTIudG8pID09IDAgJiYgZ2V0QXJlYU9mQVRyaWFuZ2xlKGxpbmUxLnRvLCBsaW5lMi5mcm9tLCBsaW5lMi50bykgPT0gMDsKfQoKaW50IGFyZTJMaW5lc1BhcmFsbGVsKExpbmUgbGluZTEsIExpbmUgbGluZTIpewoJcmV0dXJuIGdldFNsb3BlT2ZBTGluZShsaW5lMSkgPT0gZ2V0U2xvcGVPZkFMaW5lKGxpbmUyKTsKfQoKdm9pZCBzY2FuQVBvaW50KFBvaW50KiBwb2ludCl7CglzY2FuZigiJWxmICVsZiIsICZwb2ludC0+eCwgJnBvaW50LT55KTsKfQoKdm9pZCBzY2FuQUxpbmUoTGluZSogbGluZSl7CglzY2FuQVBvaW50KCZsaW5lLT5mcm9tKTsKCXNjYW5BUG9pbnQoJmxpbmUtPnRvKTsKfQoKdm9pZCBzY2FuMkxpbmVzKExpbmUqIGxpbmUxLCBMaW5lKiBsaW5lMil7CglzY2FuQUxpbmUobGluZTEpOwoJc2NhbkFMaW5lKGxpbmUyKTsKfQoKUG9pbnQgZ2V0SW50ZXJzZWN0aW9uUG9pbnQoTGluZSBsaW5lMSwgTGluZSBsaW5lMil7CglQb2ludCBpbnRlcnNlY3Rpb25Qb2ludDsKCglkb3VibGUgZGVub21pbmF0b3IgPSAwLCBub21pbmF0b3JYID0gMCwgbm9taW5hdG9yWSA9IDA7CgoJZGVub21pbmF0b3IgPSAobGluZTEuZnJvbS54IC0gbGluZTEudG8ueCkgKiAobGluZTIuZnJvbS55IC0gbGluZTIudG8ueSkgLSAobGluZTIuZnJvbS54IC0gbGluZTIudG8ueCkgKiAobGluZTEuZnJvbS55IC0gbGluZTEudG8ueSk7CgoJaWYgKGRlbm9taW5hdG9yID09IDApewoJCS8vRG9lc0ludGVyc2VjdCA9IDA7Cgl9CgllbHNlewoJCS8vRG9lc0ludGVyc2VjdCA9IDE7CgoJCW5vbWluYXRvclggPSAobGluZTEuZnJvbS54ICogbGluZTEudG8ueSAtIGxpbmUxLnRvLnggKiBsaW5lMS5mcm9tLnkpICogKGxpbmUyLmZyb20ueCAtIGxpbmUyLnRvLngpIC0gLyogKHgxeTIgLSB4MnkxKSBYICh4MyAtIHg0KSovCgkJCShsaW5lMi5mcm9tLnggKiBsaW5lMi50by55IC0gbGluZTIudG8ueCAqIGxpbmUyLmZyb20ueSkgKiAobGluZTEuZnJvbS54IC0gbGluZTEudG8ueCk7IC8qICh4M3k0IC0geDR5MykgLSAoeDEgLSB4MikqLwoJCW5vbWluYXRvclkgPSAobGluZTEuZnJvbS54ICogbGluZTEudG8ueSAtIGxpbmUxLnRvLnggKiBsaW5lMS5mcm9tLnkpICogKGxpbmUyLmZyb20ueSAtIGxpbmUyLnRvLnkpIC0gLyogKHgxeTIgLSB4MnkxKSBYICh5MyAtIHk0KSovCgkJCShsaW5lMi5mcm9tLnggKiBsaW5lMi50by55IC0gbGluZTIudG8ueCAqIGxpbmUyLmZyb20ueSkgKiAobGluZTEuZnJvbS55IC0gbGluZTEudG8ueSk7IC8qICh4M3k0IC0geDR5MykgLSAoeTEgLSB5MikqLwoKCQlpbnRlcnNlY3Rpb25Qb2ludC54ID0gbm9taW5hdG9yWCAvIGRlbm9taW5hdG9yOwoJCWludGVyc2VjdGlvblBvaW50LnkgPSBub21pbmF0b3JZIC8gZGVub21pbmF0b3I7Cgl9CgoJcmV0dXJuIGludGVyc2VjdGlvblBvaW50Owp9Cgp2b2lkIGZpbmRBbmRQcmludFJlc3VsdChMaW5lIGxpbmUxLCBMaW5lIGxpbmUyKXsKCWlmIChhcmUyTGluZXNTYW1lKGxpbmUxLCBsaW5lMikpewoJCXByaW50ZigiTElORSIpOwoJfQoJZWxzZSBpZiAoYXJlMkxpbmVzUGFyYWxsZWwobGluZTEsIGxpbmUyKSl7CgkJcHJpbnRmKCJOT05FIik7Cgl9CgllbHNlewoJCVBvaW50IGludGVyc2VjdGlvblBvaW50ID0gZ2V0SW50ZXJzZWN0aW9uUG9pbnQobGluZTEsIGxpbmUyKTsKCQlwcmludGYoIlBPSU5UICUuMmYgJS4yZiIsIGludGVyc2VjdGlvblBvaW50LngsIGludGVyc2VjdGlvblBvaW50LnkpOwoJfQoJcHJpbnRmKCJcbiIpOwp9CgppbnQgbWFpbigpewoJbG9uZyBpbnQgVCA9IDA7CglMaW5lIGxpbmUxLCBsaW5lMjsKI2lmZGVmIF9fRlJFT1BFTl9fCglmcmVvcGVuKCIzNzggLSBJbnRlcnNlY3RpbmcgTGluZXMuaW4iLCAiciIsIHN0ZGluKTsKCWZyZW9wZW4oIjM3OCAtIEludGVyc2VjdGluZyBMaW5lcy5vdXQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgoJc2NhbmYoIiVsZCIsICZUKTsKCglwcmludGYoIklOVEVSU0VDVElORyBMSU5FUyBPVVRQVVRcbiIpOwoKCXdoaWxlIChULS0pewoJCXNjYW4yTGluZXMoJmxpbmUxLCAmbGluZTIpOwoJCWZpbmRBbmRQcmludFJlc3VsdChsaW5lMSwgbGluZTIpOwoJfQoKCXByaW50ZigiRU5EIE9GIE9VVFBVVFxuIik7CgojaWZkZWYgX19GUkVPUEVOX18KCWZjbG9zZShzdGRvdXQpOwojZW5kaWYKCglyZXR1cm4gMDsKfQ==