#include <iostream>
using namespace std;
double det(double x1, double y1, double x2, double y2, double x3, double y3) {
return x1*(y2 - y3) + x2*(y3 - y1) + x3*(y1 - y2);
}
bool punkt_w_odcinku(double xA, double yA, double xB, double yB, double xP, double yP) {
if (xP >= min(xA, xB) && xP <= max(xA, xB) &&
yP >= min(yA, yB) && yP <= max(yA, yB))
return true;
return false;
}
bool odcinek_przec(double xA, double yA, double xB, double yB,
double xC, double yC, double xD, double yD) {
double d1 = det(xA, yA, xB, yB, xC, yC);
double d2 = det(xA, yA, xB, yB, xD, yD);
double d3 = det(xC, yC, xD, yD, xA, yA);
double d4 = det(xC, yC, xD, yD, xB, yB);
if ((d1 * d2 < 0) && (d3 * d4 < 0))
return true;
if (d1 == 0 && punkt_w_odcinku(xA, yA, xB, yB, xC, yC)) return true;
if (d2 == 0 && punkt_w_odcinku(xA, yA, xB, yB, xD, yD)) return true;
if (d3 == 0 && punkt_w_odcinku(xC, yC, xD, yD, xA, yA)) return true;
if (d4 == 0 && punkt_w_odcinku(xC, yC, xD, yD, xB, yB)) return true;
return false;
}
int main() {
double xA = 1, yA = 1;
double xB = 4, yB = 4;
double xC = 2, yC = 2;
double xD = 1, yD = 5;
if (odcinek_przec(xA, yA, xB, yB, xC, yC, xD, yD))
cout << "Odcinki się przecinają" << endl;
else
cout << "Odcinki się nie przecinają" << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZG91YmxlIGRldChkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGRvdWJsZSB4MywgZG91YmxlIHkzKSB7CiAgICByZXR1cm4geDEqKHkyIC0geTMpICsgeDIqKHkzIC0geTEpICsgeDMqKHkxIC0geTIpOwp9Cgpib29sIHB1bmt0X3dfb2RjaW5rdShkb3VibGUgeEEsIGRvdWJsZSB5QSwgZG91YmxlIHhCLCBkb3VibGUgeUIsIGRvdWJsZSB4UCwgZG91YmxlIHlQKSB7CiAgICBpZiAoeFAgPj0gbWluKHhBLCB4QikgJiYgeFAgPD0gbWF4KHhBLCB4QikgJiYKICAgICAgICB5UCA+PSBtaW4oeUEsIHlCKSAmJiB5UCA8PSBtYXgoeUEsIHlCKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKfQoKYm9vbCBvZGNpbmVrX3ByemVjKGRvdWJsZSB4QSwgZG91YmxlIHlBLCBkb3VibGUgeEIsIGRvdWJsZSB5QiwKICAgICAgICAgICAgICAgICAgIGRvdWJsZSB4QywgZG91YmxlIHlDLCBkb3VibGUgeEQsIGRvdWJsZSB5RCkgewoKICAgIGRvdWJsZSBkMSA9IGRldCh4QSwgeUEsIHhCLCB5QiwgeEMsIHlDKTsKICAgIGRvdWJsZSBkMiA9IGRldCh4QSwgeUEsIHhCLCB5QiwgeEQsIHlEKTsKICAgIGRvdWJsZSBkMyA9IGRldCh4QywgeUMsIHhELCB5RCwgeEEsIHlBKTsKICAgIGRvdWJsZSBkNCA9IGRldCh4QywgeUMsIHhELCB5RCwgeEIsIHlCKTsKCiAgICBpZiAoKGQxICogZDIgPCAwKSAmJiAoZDMgKiBkNCA8IDApKQogICAgICAgIHJldHVybiB0cnVlOwoKICAgIGlmIChkMSA9PSAwICYmIHB1bmt0X3dfb2RjaW5rdSh4QSwgeUEsIHhCLCB5QiwgeEMsIHlDKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoZDIgPT0gMCAmJiBwdW5rdF93X29kY2lua3UoeEEsIHlBLCB4QiwgeUIsIHhELCB5RCkpIHJldHVybiB0cnVlOwogICAgaWYgKGQzID09IDAgJiYgcHVua3Rfd19vZGNpbmt1KHhDLCB5QywgeEQsIHlELCB4QSwgeUEpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChkNCA9PSAwICYmIHB1bmt0X3dfb2RjaW5rdSh4QywgeUMsIHhELCB5RCwgeEIsIHlCKSkgcmV0dXJuIHRydWU7CgogICAgcmV0dXJuIGZhbHNlOwp9CgppbnQgbWFpbigpIHsKICAgIGRvdWJsZSB4QSA9IDEsIHlBID0gMTsKICAgIGRvdWJsZSB4QiA9IDQsIHlCID0gNDsKICAgIGRvdWJsZSB4QyA9IDIsIHlDID0gMjsKICAgIGRvdWJsZSB4RCA9IDEsIHlEID0gNTsKCiAgICBpZiAob2RjaW5la19wcnplYyh4QSwgeUEsIHhCLCB5QiwgeEMsIHlDLCB4RCwgeUQpKQogICAgICAgIGNvdXQgPDwgIk9kY2lua2kgc2nEmSBwcnplY2luYWrEhSIgPDwgZW5kbDsKICAgIGVsc2UKICAgICAgICBjb3V0IDw8ICJPZGNpbmtpIHNpxJkgbmllIHByemVjaW5hasSFIiA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9