#include <iostream>
using namespace std;
double det(double xA, double yA, double xB, double yB, double xC, double yC)
{
return (xB - xA) * (yC - yA) - (yB - yA) * (xC - xA);
}
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 sie przecinaja" << endl;
else
cout << "Odcinki sie nie przecinaja" << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZG91YmxlIGRldChkb3VibGUgeEEsIGRvdWJsZSB5QSwgZG91YmxlIHhCLCBkb3VibGUgeUIsIGRvdWJsZSB4QywgZG91YmxlIHlDKQp7CiAgICByZXR1cm4gKHhCIC0geEEpICogKHlDIC0geUEpIC0gKHlCIC0geUEpICogKHhDIC0geEEpOwp9Cgpib29sIHB1bmt0X3dfb2RjaW5rdShkb3VibGUgeEEsIGRvdWJsZSB5QSwgZG91YmxlIHhCLCBkb3VibGUgeUIsIGRvdWJsZSB4UCwgZG91YmxlIHlQKQp7CiAgICBpZiAoeFAgPj0gbWluKHhBLCB4QikgJiYgeFAgPD0gbWF4KHhBLCB4QikgJiYKICAgICAgICB5UCA+PSBtaW4oeUEsIHlCKSAmJiB5UCA8PSBtYXgoeUEsIHlCKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKfQoKYm9vbCBvZGNpbmVrX3ByemVjKGRvdWJsZSB4QSwgZG91YmxlIHlBLCBkb3VibGUgeEIsIGRvdWJsZSB5QiwKICAgICAgICAgICAgICAgICAgIGRvdWJsZSB4QywgZG91YmxlIHlDLCBkb3VibGUgeEQsIGRvdWJsZSB5RCkKewogICAgZG91YmxlIGQxID0gZGV0KHhBLCB5QSwgeEIsIHlCLCB4QywgeUMpOwogICAgZG91YmxlIGQyID0gZGV0KHhBLCB5QSwgeEIsIHlCLCB4RCwgeUQpOwogICAgZG91YmxlIGQzID0gZGV0KHhDLCB5QywgeEQsIHlELCB4QSwgeUEpOwogICAgZG91YmxlIGQ0ID0gZGV0KHhDLCB5QywgeEQsIHlELCB4QiwgeUIpOwoKICAgIGlmIChkMSAqIGQyIDwgMCAmJiBkMyAqIGQ0IDwgMCkKICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICBpZiAoZDEgPT0gMCAmJiBwdW5rdF93X29kY2lua3UoeEEsIHlBLCB4QiwgeUIsIHhDLCB5QykpIHJldHVybiB0cnVlOwogICAgaWYgKGQyID09IDAgJiYgcHVua3Rfd19vZGNpbmt1KHhBLCB5QSwgeEIsIHlCLCB4RCwgeUQpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChkMyA9PSAwICYmIHB1bmt0X3dfb2RjaW5rdSh4QywgeUMsIHhELCB5RCwgeEEsIHlBKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoZDQgPT0gMCAmJiBwdW5rdF93X29kY2lua3UoeEMsIHlDLCB4RCwgeUQsIHhCLCB5QikpIHJldHVybiB0cnVlOwoKICAgIHJldHVybiBmYWxzZTsKfQoKaW50IG1haW4oKQp7CiAgICBkb3VibGUgeEEgPSAxLCB5QSA9IDE7CiAgICBkb3VibGUgeEIgPSA0LCB5QiA9IDQ7CiAgICBkb3VibGUgeEMgPSAyLCB5QyA9IDI7CiAgICBkb3VibGUgeEQgPSAxLCB5RCA9IDU7CgogICAgaWYgKG9kY2luZWtfcHJ6ZWMoeEEsIHlBLCB4QiwgeUIsIHhDLCB5QywgeEQsIHlEKSkKICAgICAgICBjb3V0IDw8ICJPZGNpbmtpIHNpZSBwcnplY2luYWphIiA8PCBlbmRsOwogICAgZWxzZQogICAgICAgIGNvdXQgPDwgIk9kY2lua2kgc2llIG5pZSBwcnplY2luYWphIiA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9