JosepRivaille

P82952: Rectangles(2)

May 7th, 2015
1,683
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. struct Rectangle {
  6.     int x_esq, x_dre, y_baix, y_dalt;
  7. };
  8.  
  9. void llegeix(Rectangle& r) {
  10.     cin >> r.x_esq >> r.x_dre >> r.y_baix >> r.y_dalt;
  11. }
  12.  
  13. int relacio(const Rectangle& r1, const Rectangle& r2) {
  14.     if (r1.x_esq == r2.x_esq && r1.x_dre == r2.x_dre && r1.y_baix == r2.y_baix && r1.y_dalt == r2.y_dalt) return 4;
  15.     if (r2.x_esq <= r1.x_esq && r2.x_dre >= r1.x_dre && r2.y_baix <= r1.y_baix && r2.y_dalt >= r1.y_dalt) return 1;
  16.     if (r1.x_esq <= r2.x_esq && r1.x_dre >= r2.x_dre && r1.y_baix <= r2.y_baix && r1.y_dalt >= r2.y_dalt) return 2;
  17.     if (r1.y_baix >= r2.y_dalt or r2.y_baix >= r1. y_dalt or r1.x_esq >= r2.x_dre or r2.x_esq >= r1.x_dre) return 0;
  18.     else return 3;
  19. }
  20.  
  21. //Pre: Llegeix indefinides sequncies de n rectangles
  22. //Post: Escriu la interseccio entre aquests n rectangles
  23. int main() {
  24.     int n;
  25.     while (cin >> n && n != 0)  {
  26.         Rectangle r1, r2;
  27.         llegeix(r2);
  28.         --n;
  29.         bool intersec = true;
  30.         while (intersec && n != 0) {
  31.             r1.x_esq = r2.x_esq;
  32.             r1.x_dre = r2.x_dre;
  33.             r1.y_baix = r2.y_baix;
  34.             r1.y_dalt = r2.y_dalt;
  35.             llegeix(r2);
  36.             if (relacio(r1, r2) == 0) intersec = false;
  37.             else if (relacio(r1, r2) == 1) {
  38.                 r2.x_esq = r1.x_esq;
  39.                 r2.x_dre = r1.x_dre;
  40.                 r2.y_dalt = r1.y_dalt;
  41.                 r2.y_baix = r1.y_baix;
  42.             }
  43.             else if (relacio(r1, r2) == 3) {
  44.                 if (r1.x_esq > r2.x_esq) r2.x_esq = r1.x_esq;
  45.                 if (r1.x_dre < r2.x_dre) r2.x_dre = r1.x_dre;
  46.                 if (r1.y_baix > r2.y_baix) r2.y_baix = r1.y_baix;
  47.                 if (r1.y_dalt < r2.y_dalt) r2.y_dalt = r1.y_dalt;
  48.             }
  49.             //relacio(r1, r2) == 4 || relacio(r1, r2) == 2 es queda igual
  50.             --n;
  51.         }
  52.         if (not intersec) {
  53.           cout << "interseccio buida" << endl;
  54.           while (n != 0) {
  55.             llegeix(r2);
  56.             --n;
  57.           }
  58.         }
  59.         else {
  60.             cout << "punt inferior esquerre = (" << r2.x_esq << ", " << r2.y_baix << ");";
  61.             cout << " punt superior dret = (" << r2.x_dre << ", " << r2.y_dalt << ")" << endl;
  62.         }
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment