fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Punkt {
  5. double x;
  6. double y;
  7. };
  8.  
  9. // funkcja obliczająca wyznacznik
  10. double det(Punkt A, Punkt B, Punkt P) {
  11. return (B.x - A.x) * (P.y - A.y) - (B.y - A.y) * (P.x - A.x);
  12. }
  13.  
  14. // funkcja wczytująca punkt
  15. void czytaj_punkt(Punkt &P, string nazwa) {
  16. cout << "Podaj wspolrzedne punktu " << nazwa << " (x y): ";
  17. cin >> P.x >> P.y;
  18. }
  19.  
  20. // funkcja sprawdzająca czy punkt P należy do odcinka AB
  21. bool punkt_w_odcinku(Punkt A, Punkt B, Punkt P) {
  22.  
  23. // sprawdzenie współliniowości
  24. if (det(A, B, P) != 0)
  25. return false;
  26.  
  27. // sprawdzenie czy P leży w zakresie odcinka
  28. if (P.x >= min(A.x, B.x) && P.x <= max(A.x, B.x) &&
  29. P.y >= min(A.y, B.y) && P.y <= max(A.y, B.y))
  30. return true;
  31.  
  32. return false;
  33. }
  34.  
  35. int main() {
  36. Punkt A, B, P;
  37.  
  38. czytaj_punkt(A, "A");
  39. czytaj_punkt(B, "B");
  40. czytaj_punkt(P, "P");
  41.  
  42. if (punkt_w_odcinku(A, B, P))
  43. cout << "Punkt P nalezy do odcinka AB." << endl;
  44. else
  45. cout << "Punkt P nie nalezy do odcinka AB." << endl;
  46.  
  47. return 0;
  48. }
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
Podaj wspolrzedne punktu A (x y): Podaj wspolrzedne punktu B (x y): Podaj wspolrzedne punktu P (x y): Punkt P nie nalezy do odcinka AB.