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