#include <bits/stdc++.h>
using namespace std;
struct point {
double x, y;
// constructor
point() {
// cout << "Constructor kosong" << endl;
}
point(double _x, double _y) {
// cout << "Constructor dgn 2 double" << endl;
x = _x;
y = _y;
}
double euclidean(point other) {
return sqrt((x-other.x)*(x-other.x) + (y-other.y)*(y-other.y));
}
double manhattan(point other) {
return abs(x-other.x) + abs(y-other.y);
}
};
struct line {
// Ax + By = C
double A, B, C;
line() {}
line(double _A, double _B, double _C) {
A = _A;
B = _B;
C = _C;
}
bool isVertical() {
return B == 0;
}
double gradient() {
if(isVertical())
return 0;
return -A/B;
}
double constant() {
if(isVertical())
return 0;
return C/B;
}
double distanceFromPoint(point other) {
return fabs((A*other.x+B*other.y-C)/sqrt(A*A+B*B));
}
};
struct segment {
point p1, p2;
line extension() {
// (y-y1)/(y2-y1) = (x-x1)/(x2-x1)
// (y-y1)*(x2-x1) = (x-x1)*(y2-y1)
// y*(x2-x1) - x*(y2-y1) = (y1*(x2-x1)) - (x1*(y2-y1))
// (y1-y2)*x + (x2-x1)*y = y1*x2 - x1*y2
// A *x + B *y = C
double A, B, C;
A = p1.y - p2.y;
B = p2.x - p1.x;
C = p1.y*p2.x - p1.x*p2.y;
return line(A, B, C);
}
bool isCrossing(segment other) {
}
};
int main() {
double x1, y1, x2, y2;
segment garis;
cin >> x1 >> y1 >> x2 >> y2
>> garis.p1.x >> garis.p1.y
>> garis.p2.x >> garis.p2.y;
line garis2 = garis.extension();
// cek berpotongan dengan (x1,y1) ke (x1,y2)
// cek perpotongan ruas garis (atau extension) dgn garis x = x1
// Ax1 + By = C --> y = (C-A*x1)/B
double y = (garis2.C - garis2.A * x1)/garis2.B;
if((garis.p1.y < y && y < garis.p2.y) || ((garis.p1.y > y && y > garis.p2.y)))
cout << "diantara" << endl;
cout << y << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKCnN0cnVjdCBwb2ludCB7Cglkb3VibGUgeCwgeTsKCS8vIGNvbnN0cnVjdG9yCglwb2ludCgpIHsKCQkvLyBjb3V0IDw8ICJDb25zdHJ1Y3RvciBrb3NvbmciIDw8IGVuZGw7Cgl9Cglwb2ludChkb3VibGUgX3gsIGRvdWJsZSBfeSkgewoJCS8vIGNvdXQgPDwgIkNvbnN0cnVjdG9yIGRnbiAyIGRvdWJsZSIgPDwgZW5kbDsKCQl4ID0gX3g7CgkJeSA9IF95OwoJfQoJZG91YmxlIGV1Y2xpZGVhbihwb2ludCBvdGhlcikgewoJCXJldHVybiBzcXJ0KCh4LW90aGVyLngpKih4LW90aGVyLngpICsgKHktb3RoZXIueSkqKHktb3RoZXIueSkpOwoJfQoJZG91YmxlIG1hbmhhdHRhbihwb2ludCBvdGhlcikgewoJCXJldHVybiBhYnMoeC1vdGhlci54KSArIGFicyh5LW90aGVyLnkpOwoJfQp9OwoKc3RydWN0IGxpbmUgewoJLy8gQXggKyBCeSA9IEMKCWRvdWJsZSBBLCBCLCBDOwoJCglsaW5lKCkge30KCWxpbmUoZG91YmxlIF9BLCBkb3VibGUgX0IsIGRvdWJsZSBfQykgewoJCUEgPSBfQTsKCQlCID0gX0I7CgkJQyA9IF9DOwoJfQoJYm9vbCBpc1ZlcnRpY2FsKCkgewoJCXJldHVybiBCID09IDA7Cgl9Cglkb3VibGUgZ3JhZGllbnQoKSB7CgkJaWYoaXNWZXJ0aWNhbCgpKQoJCQlyZXR1cm4gMDsKCQlyZXR1cm4gLUEvQjsKCX0KCWRvdWJsZSBjb25zdGFudCgpIHsKCQlpZihpc1ZlcnRpY2FsKCkpCgkJCXJldHVybiAwOwoJCXJldHVybiBDL0I7Cgl9Cglkb3VibGUgZGlzdGFuY2VGcm9tUG9pbnQocG9pbnQgb3RoZXIpIHsKCQlyZXR1cm4gZmFicygoQSpvdGhlci54K0Iqb3RoZXIueS1DKS9zcXJ0KEEqQStCKkIpKTsKCX0KfTsKCnN0cnVjdCBzZWdtZW50IHsKCXBvaW50IHAxLCBwMjsKCWxpbmUgZXh0ZW5zaW9uKCkgewoJCS8vICh5LXkxKS8oeTIteTEpID0gKHgteDEpLyh4Mi14MSkKCQkvLyAoeS15MSkqKHgyLXgxKSA9ICh4LXgxKSooeTIteTEpCgkJLy8geSooeDIteDEpIC0geCooeTIteTEpID0gKHkxKih4Mi14MSkpIC0gKHgxKih5Mi15MSkpCgkJLy8gKHkxLXkyKSp4ICsgKHgyLXgxKSp5ID0geTEqeDIgLSB4MSp5MgoJCS8vICAgIEEgICAqeCArICAgIEIgICAqeSA9ICAgICAgIEMKCQlkb3VibGUgQSwgQiwgQzsKCQlBID0gcDEueSAtIHAyLnk7CgkJQiA9IHAyLnggLSBwMS54OwoJCUMgPSBwMS55KnAyLnggLSBwMS54KnAyLnk7CgkJcmV0dXJuIGxpbmUoQSwgQiwgQyk7Cgl9Cglib29sIGlzQ3Jvc3Npbmcoc2VnbWVudCBvdGhlcikgewoJCQoJfQp9OwoKaW50IG1haW4oKSB7Cglkb3VibGUgeDEsIHkxLCB4MiwgeTI7CglzZWdtZW50IGdhcmlzOwoJY2luID4+IHgxID4+IHkxID4+IHgyID4+IHkyCgkJPj4gZ2FyaXMucDEueCA+PiBnYXJpcy5wMS55CgkJPj4gZ2FyaXMucDIueCA+PiBnYXJpcy5wMi55OwoJbGluZSBnYXJpczIgPSBnYXJpcy5leHRlbnNpb24oKTsKCS8vIGNlayBiZXJwb3RvbmdhbiBkZW5nYW4gKHgxLHkxKSBrZSAoeDEseTIpCgkvLyBjZWsgcGVycG90b25nYW4gcnVhcyBnYXJpcyAoYXRhdSBleHRlbnNpb24pIGRnbiBnYXJpcyB4ID0geDEKCS8vIEF4MSArIEJ5ID0gQyAtLT4geSA9IChDLUEqeDEpL0IKCWRvdWJsZSB5ID0gKGdhcmlzMi5DIC0gZ2FyaXMyLkEgKiB4MSkvZ2FyaXMyLkI7CglpZigoZ2FyaXMucDEueSA8IHkgJiYgeSA8IGdhcmlzLnAyLnkpIHx8ICgoZ2FyaXMucDEueSA+IHkgJiYgeSA+IGdhcmlzLnAyLnkpKSkKCQljb3V0IDw8ICJkaWFudGFyYSIgPDwgZW5kbDsKCWNvdXQgPDwgeSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=