#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;
}
ICNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmRvdWJsZSBkZXQoZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBkb3VibGUgeDMsIGRvdWJsZSB5MykgewogICAgcmV0dXJuIHgxKih5MiAtIHkzKSArIHgyKih5MyAtIHkxKSArIHgzKih5MSAtIHkyKTsKfQoKYm9vbCBwdW5rdF93X29kY2lua3UoZG91YmxlIHhBLCBkb3VibGUgeUEsIGRvdWJsZSB4QiwgZG91YmxlIHlCLCBkb3VibGUgeFAsIGRvdWJsZSB5UCkgewogICAgaWYgKHhQID49IG1pbih4QSwgeEIpICYmIHhQIDw9IG1heCh4QSwgeEIpICYmCiAgICAgICAgeVAgPj0gbWluKHlBLCB5QikgJiYgeVAgPD0gbWF4KHlBLCB5QikpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gZmFsc2U7Cn0KCmJvb2wgb2RjaW5la19wcnplYyhkb3VibGUgeEEsIGRvdWJsZSB5QSwgZG91YmxlIHhCLCBkb3VibGUgeUIsCiAgICAgICAgICAgICAgICAgICBkb3VibGUgeEMsIGRvdWJsZSB5QywgZG91YmxlIHhELCBkb3VibGUgeUQpIHsKCiAgICBkb3VibGUgZDEgPSBkZXQoeEEsIHlBLCB4QiwgeUIsIHhDLCB5Qyk7CiAgICBkb3VibGUgZDIgPSBkZXQoeEEsIHlBLCB4QiwgeUIsIHhELCB5RCk7CiAgICBkb3VibGUgZDMgPSBkZXQoeEMsIHlDLCB4RCwgeUQsIHhBLCB5QSk7CiAgICBkb3VibGUgZDQgPSBkZXQoeEMsIHlDLCB4RCwgeUQsIHhCLCB5Qik7CgogICAgaWYgKChkMSAqIGQyIDwgMCkgJiYgKGQzICogZDQgPCAwKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICBpZiAoZDEgPT0gMCAmJiBwdW5rdF93X29kY2lua3UoeEEsIHlBLCB4QiwgeUIsIHhDLCB5QykpIHJldHVybiB0cnVlOwogICAgaWYgKGQyID09IDAgJiYgcHVua3Rfd19vZGNpbmt1KHhBLCB5QSwgeEIsIHlCLCB4RCwgeUQpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChkMyA9PSAwICYmIHB1bmt0X3dfb2RjaW5rdSh4QywgeUMsIHhELCB5RCwgeEEsIHlBKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoZDQgPT0gMCAmJiBwdW5rdF93X29kY2lua3UoeEMsIHlDLCB4RCwgeUQsIHhCLCB5QikpIHJldHVybiB0cnVlOwoKICAgIHJldHVybiBmYWxzZTsKfQoKaW50IG1haW4oKSB7CiAgICBkb3VibGUgeEEgPSAxLCB5QSA9IDE7CiAgICBkb3VibGUgeEIgPSA0LCB5QiA9IDQ7CiAgICBkb3VibGUgeEMgPSAyLCB5QyA9IDI7CiAgICBkb3VibGUgeEQgPSAxLCB5RCA9IDU7CgogICAgaWYgKG9kY2luZWtfcHJ6ZWMoeEEsIHlBLCB4QiwgeUIsIHhDLCB5QywgeEQsIHlEKSkKICAgICAgICBjb3V0IDw8ICJPZGNpbmtpIHNpxJkgcHJ6ZWNpbmFqxIUiIDw8IGVuZGw7CiAgICBlbHNlCiAgICAgICAgY291dCA8PCAiT2RjaW5raSBzacSZIG5pZSBwcnplY2luYWrEhSIgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==