#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 odcinki_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, yA, xB, yB, xC, yC, xD, yD;
cout << "Podaj wspolrzedne punktu A (x y): " ;
cin >> xA >> yA;
cout << "Podaj wspolrzedne punktu B (x y): " ;
cin >> xB >> yB;
cout << "Podaj wspolrzedne punktu C (x y): " ;
cin >> xC >> yC;
cout << "Podaj wspolrzedne punktu D (x y): " ;
cin >> xD >> yD;
if ( odcinki_przec( xA, yA, xB, yB, xC, yC, xD, yD) )
cout << "Odcinki sie przecinaja" << endl;
else
cout << "Odcinki sie nie przecinaja" << endl;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZG91YmxlIGRldChkb3VibGUgeEEsIGRvdWJsZSB5QSwgZG91YmxlIHhCLCBkb3VibGUgeUIsIGRvdWJsZSB4QywgZG91YmxlIHlDKQp7CiAgICByZXR1cm4gKHhCIC0geEEpICogKHlDIC0geUEpIC0gKHlCIC0geUEpICogKHhDIC0geEEpOwp9Cgpib29sIHB1bmt0X3dfb2RjaW5rdShkb3VibGUgeEEsIGRvdWJsZSB5QSwgZG91YmxlIHhCLCBkb3VibGUgeUIsIGRvdWJsZSB4UCwgZG91YmxlIHlQKQp7CiAgICBpZiAoeFAgPj0gbWluKHhBLCB4QikgJiYgeFAgPD0gbWF4KHhBLCB4QikgJiYKICAgICAgICB5UCA+PSBtaW4oeUEsIHlCKSAmJiB5UCA8PSBtYXgoeUEsIHlCKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKfQoKYm9vbCBvZGNpbmtpX3ByemVjKGRvdWJsZSB4QSwgZG91YmxlIHlBLCBkb3VibGUgeEIsIGRvdWJsZSB5QiwKICAgICAgICAgICAgICAgICAgIGRvdWJsZSB4QywgZG91YmxlIHlDLCBkb3VibGUgeEQsIGRvdWJsZSB5RCkKewogICAgZG91YmxlIGQxID0gZGV0KHhBLCB5QSwgeEIsIHlCLCB4QywgeUMpOwogICAgZG91YmxlIGQyID0gZGV0KHhBLCB5QSwgeEIsIHlCLCB4RCwgeUQpOwogICAgZG91YmxlIGQzID0gZGV0KHhDLCB5QywgeEQsIHlELCB4QSwgeUEpOwogICAgZG91YmxlIGQ0ID0gZGV0KHhDLCB5QywgeEQsIHlELCB4QiwgeUIpOwoKICAgIGlmIChkMSAqIGQyIDwgMCAmJiBkMyAqIGQ0IDwgMCkKICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICBpZiAoZDEgPT0gMCAmJiBwdW5rdF93X29kY2lua3UoeEEsIHlBLCB4QiwgeUIsIHhDLCB5QykpIHJldHVybiB0cnVlOwogICAgaWYgKGQyID09IDAgJiYgcHVua3Rfd19vZGNpbmt1KHhBLCB5QSwgeEIsIHlCLCB4RCwgeUQpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChkMyA9PSAwICYmIHB1bmt0X3dfb2RjaW5rdSh4QywgeUMsIHhELCB5RCwgeEEsIHlBKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoZDQgPT0gMCAmJiBwdW5rdF93X29kY2lua3UoeEMsIHlDLCB4RCwgeUQsIHhCLCB5QikpIHJldHVybiB0cnVlOwoKICAgIHJldHVybiBmYWxzZTsKfQoKaW50IG1haW4oKQp7CiAgICBkb3VibGUgeEEsIHlBLCB4QiwgeUIsIHhDLCB5QywgeEQsIHlEOwoKICAgIGNvdXQgPDwgIlBvZGFqIHdzcG9scnplZG5lIHB1bmt0dSBBICh4IHkpOiAiOwogICAgY2luID4+IHhBID4+IHlBOwoKICAgIGNvdXQgPDwgIlBvZGFqIHdzcG9scnplZG5lIHB1bmt0dSBCICh4IHkpOiAiOwogICAgY2luID4+IHhCID4+IHlCOwoKICAgIGNvdXQgPDwgIlBvZGFqIHdzcG9scnplZG5lIHB1bmt0dSBDICh4IHkpOiAiOwogICAgY2luID4+IHhDID4+IHlDOwoKICAgIGNvdXQgPDwgIlBvZGFqIHdzcG9scnplZG5lIHB1bmt0dSBEICh4IHkpOiAiOwogICAgY2luID4+IHhEID4+IHlEOwoKICAgIGlmIChvZGNpbmtpX3ByemVjKHhBLCB5QSwgeEIsIHlCLCB4QywgeUMsIHhELCB5RCkpCiAgICAgICAgY291dCA8PCAiT2RjaW5raSBzaWUgcHJ6ZWNpbmFqYSIgPDwgZW5kbDsKICAgIGVsc2UKICAgICAgICBjb3V0IDw8ICJPZGNpbmtpIHNpZSBuaWUgcHJ6ZWNpbmFqYSIgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==