fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. double det(double xA, double yA, double xB, double yB, double xC, double yC)
  5. {
  6. return (xB - xA) * (yC - yA) - (yB - yA) * (xC - xA);
  7. }
  8.  
  9. bool punkt_w_odcinku(double xA, double yA, double xB, double yB, double xP, double yP)
  10. {
  11. if (xP >= min(xA, xB) && xP <= max(xA, xB) &&
  12. yP >= min(yA, yB) && yP <= max(yA, yB))
  13. return true;
  14. return false;
  15. }
  16.  
  17. bool odcinki_przec(double xA, double yA, double xB, double yB,
  18. double xC, double yC, double xD, double yD)
  19. {
  20. double d1 = det(xA, yA, xB, yB, xC, yC);
  21. double d2 = det(xA, yA, xB, yB, xD, yD);
  22. double d3 = det(xC, yC, xD, yD, xA, yA);
  23. double d4 = det(xC, yC, xD, yD, xB, yB);
  24.  
  25. if (d1 * d2 < 0 && d3 * d4 < 0)
  26. return true;
  27.  
  28. if (d1 == 0 && punkt_w_odcinku(xA, yA, xB, yB, xC, yC)) return true;
  29. if (d2 == 0 && punkt_w_odcinku(xA, yA, xB, yB, xD, yD)) return true;
  30. if (d3 == 0 && punkt_w_odcinku(xC, yC, xD, yD, xA, yA)) return true;
  31. if (d4 == 0 && punkt_w_odcinku(xC, yC, xD, yD, xB, yB)) return true;
  32.  
  33. return false;
  34. }
  35.  
  36. int main()
  37. {
  38. double xA, yA, xB, yB, xC, yC, xD, yD;
  39.  
  40. cout << "Podaj wspolrzedne punktu A (x y): ";
  41. cin >> xA >> yA;
  42.  
  43. cout << "Podaj wspolrzedne punktu B (x y): ";
  44. cin >> xB >> yB;
  45.  
  46. cout << "Podaj wspolrzedne punktu C (x y): ";
  47. cin >> xC >> yC;
  48.  
  49. cout << "Podaj wspolrzedne punktu D (x y): ";
  50. cin >> xD >> yD;
  51.  
  52. if (odcinki_przec(xA, yA, xB, yB, xC, yC, xD, yD))
  53. cout << "Odcinki sie przecinaja" << endl;
  54. else
  55. cout << "Odcinki sie nie przecinaja" << endl;
  56.  
  57. return 0;
  58. }
Success #stdin #stdout 0.01s 5272KB
stdin
0 0 2 2 0 2 2 0
stdout
Podaj wspolrzedne punktu A (x y): Podaj wspolrzedne punktu B (x y): Podaj wspolrzedne punktu C (x y): Podaj wspolrzedne punktu D (x y): Odcinki sie przecinaja