#include <iostream>
using namespace std;
struct Punkt {
double x, y;
} ;
double det( Punkt A, Punkt B, Punkt C) {
return ( B.x - A.x ) * ( C.y - A.y ) - ( B.y - A.y ) * ( C.x - A.x ) ;
}
bool punkt_w_odcinku( Punkt A, Punkt B, Punkt P) {
if ( P.x >= min( A.x , B.x ) && P.x <= max( A.x , B.x ) &&
P.y >= min( A.y , B.y ) && P.y <= max( A.y , B.y ) )
return true ;
return false ;
}
bool odcinki_przec( Punkt A, Punkt B, Punkt C, Punkt D) {
double d1 = det( A, B, C) ;
double d2 = det( A, B, D) ;
double d3 = det( C, D, A) ;
double d4 = det( C, D, B) ;
if ( ( d1 * d2 < 0 ) && ( d3 * d4 < 0 ) )
return true ;
if ( d1 == 0 && punkt_w_odcinku( A, B, C) ) return true ;
if ( d2 == 0 && punkt_w_odcinku( A, B, D) ) return true ;
if ( d3 == 0 && punkt_w_odcinku( C, D, A) ) return true ;
if ( d4 == 0 && punkt_w_odcinku( C, D, B) ) return true ;
return false ;
}
int main( ) {
Punkt A, B, C, D;
cout << "Podaj wspolrzedne punktu A (1,1): " ;
cin >> A.x >> A.y ;
cout << "Podaj wspolrzedne punktu B (2,2): " ;
cin >> B.x >> B.y ;
cout << "Podaj wspolrzedne punktu C (1,2): " ;
cin >> C.x >> C.y ;
cout << "Podaj wspolrzedne punktu D (2,1): " ;
cin >> D.x >> D.y ;
if ( odcinki_przec( A, B, C, D) )
cout << "odcinki sie przecinaja" ;
else
cout << "odcinki sie nie przecinaja" ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFB1bmt0IHsKICAgIGRvdWJsZSB4LCB5Owp9OwoKZG91YmxlIGRldChQdW5rdCBBLCBQdW5rdCBCLCBQdW5rdCBDKSB7CiAgICByZXR1cm4gKEIueCAtIEEueCkgKiAoQy55IC0gQS55KSAtIChCLnkgLSBBLnkpICogKEMueCAtIEEueCk7Cn0KCmJvb2wgcHVua3Rfd19vZGNpbmt1KFB1bmt0IEEsIFB1bmt0IEIsIFB1bmt0IFApIHsKICAgIGlmIChQLnggPj0gbWluKEEueCwgQi54KSAmJiBQLnggPD0gbWF4KEEueCwgQi54KSAmJgogICAgICAgIFAueSA+PSBtaW4oQS55LCBCLnkpICYmIFAueSA8PSBtYXgoQS55LCBCLnkpKQogICAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwp9Cgpib29sIG9kY2lua2lfcHJ6ZWMoUHVua3QgQSwgUHVua3QgQiwgUHVua3QgQywgUHVua3QgRCkgewogICAgZG91YmxlIGQxID0gZGV0KEEsIEIsIEMpOwogICAgZG91YmxlIGQyID0gZGV0KEEsIEIsIEQpOwogICAgZG91YmxlIGQzID0gZGV0KEMsIEQsIEEpOwogICAgZG91YmxlIGQ0ID0gZGV0KEMsIEQsIEIpOwoKICAgIGlmICgoZDEgKiBkMiA8IDApICYmIChkMyAqIGQ0IDwgMCkpCiAgICAgICAgcmV0dXJuIHRydWU7CgogICAgaWYgKGQxID09IDAgJiYgcHVua3Rfd19vZGNpbmt1KEEsIEIsIEMpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChkMiA9PSAwICYmIHB1bmt0X3dfb2RjaW5rdShBLCBCLCBEKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoZDMgPT0gMCAmJiBwdW5rdF93X29kY2lua3UoQywgRCwgQSkpIHJldHVybiB0cnVlOwogICAgaWYgKGQ0ID09IDAgJiYgcHVua3Rfd19vZGNpbmt1KEMsIEQsIEIpKSByZXR1cm4gdHJ1ZTsKCiAgICByZXR1cm4gZmFsc2U7Cn0KCmludCBtYWluKCkgewogICAgUHVua3QgQSwgQiwgQywgRDsKCiAgICBjb3V0IDw8ICJQb2RhaiB3c3BvbHJ6ZWRuZSBwdW5rdHUgQSAoMSwxKTogIjsKICAgIGNpbiA+PiBBLnggPj4gQS55OwoKICAgIGNvdXQgPDwgIlBvZGFqIHdzcG9scnplZG5lIHB1bmt0dSBCICgyLDIpOiAiOwogICAgY2luID4+IEIueCA+PiBCLnk7CgogICAgY291dCA8PCAiUG9kYWogd3Nwb2xyemVkbmUgcHVua3R1IEMgKDEsMik6ICI7CiAgICBjaW4gPj4gQy54ID4+IEMueTsKCiAgICBjb3V0IDw8ICJQb2RhaiB3c3BvbHJ6ZWRuZSBwdW5rdHUgRCAoMiwxKTogIjsKICAgIGNpbiA+PiBELnggPj4gRC55OwoKICAgIGlmIChvZGNpbmtpX3ByemVjKEEsIEIsIEMsIEQpKQogICAgICAgIGNvdXQgPDwgIm9kY2lua2kgc2llIHByemVjaW5hamEiOwogICAgZWxzZQogICAgICAgIGNvdXQgPDwgIm9kY2lua2kgc2llIG5pZSBwcnplY2luYWphIjsKCiAgICByZXR1cm4gMDsKfQ==