===== Kretowisko II ===== Zaimplementuj klasę kretowisko: class Kretowisko{ public: vector komory; /* * dodaje komorę, ale tylko w przypadku, * kiedy nie przecina się z posotałymi */ bool dodaj(const Komora&k); /* * Buduje kretowisko losując n komór o współrzednych x, y z zakresu [min,max] * Wygenerowane komory należy przesunąć o dx=rand()%scatter, dy=rand()%scatter i dz=0 * Ponieważ komory są pod ziemią - dla współrzednej z losuj z zakresu -abs(depth) do -1 */ void buduj(int n, int min, int max, int depth, int scatter); /* * Zapisz w formacie ( komora1,komora2,komora3,....) */ ostream&wypisz(ostream&os)const; /* * Wczytaj w takim formacie, jak zapisałeś */ istream&wczytaj(istream&is); /* * Zwróć całkowitą powierzchnię komór */ int powierzchnia()const; /* * Zwróć powierzchnię komór na głębokości depth */ int powierzchnia(int depth)const; /* * Zwróć całkowitą objętość komór */ int objetosc()const; /* * Zwróć objętość komór od -inf do głębokości depth * Jest to patrząc formalnie całka powierzchnia(d) delta_d * Ale powierzchnia(d) to funkcja odcnikami stała... */ int objetosc(int depth)const; /* * Wszystkie komory są połączone ze sobą. Złośliwy ogrodnik wlał do kretowiska wodę, * która rozpłynęła się pomiędzy komoram. * Załóż że objętość wlanej wody nie przewyższa sumarycznej objętości komór * Oblicz do jakiego poziomu zostaną zalane komory? */ double poziom_wody(double v)const; }; ==== Implementacja metod ==== bool Kretowisko::dodaj(const Komora&k){ return true; } void Kretowisko::buduj(int n, int min, int max, int depth, int scatter){ int i=0; if(depth>0)depth*=-1; while(i ==== Napisz testy funkcji I/O i tworzenia kretowiska ==== /* * Wywołaj metodę buduj i wypisz */ void test_kretowisko_buduj(){ } /* * Wczytaj ze stringu i wypisz */ void test_kretowisko_wczytaj() { string s="(( 8 15 -5 , 11 14 -7 ) ( 14 13 -4 , 17 11 -8 ) ( 13 7 -3 , 16 4 -4 ) " "( 1 6 -7 , 4 4 -10 ) ( 16 20 -4 , 18 19 -10 ) ( 5 16 -7 , 8 14 -8 ) " "( 13 11 -3 , 17 10 -5 ) ( 11 20 -2 , 13 18 -7 ) ( 17 14 -5 , 18 12 -8 ) " "( 17 18 -4 , 20 16 -9 ) )"; istringstream is(s); } /* * Zbuduj * Zapisz do stringu s * Wczytaj ze stringu s * Wypisz na cout * Zapisz do stringu s2 * Porównaj stringi */ void test_kretowisko_buduj_zapisz_wczytaj_wypisz(){ srand(0); } ==== Napisz metody związane z zalewaniem wodą ==== Rysunek ilustruje wykresy powierzchni i objętości {{::kretowisko.png?400|Zależność powierzchni od głębokości}} Uwage - możesz chcieć umieścić wpółrzędne z komór w kontenerze set punkty a następnie przeiterować: for(int z:punkty) ... w z zachodzi zmiana powierzchni Napisz testy związane z zalewaniem wodą /* * Utwórz kretowisko z jedną komorą * Przeiteruj od z2 do z1 w pętli i wypisuj powierzchnię i sumaryczną objetość poniżej z */ void test_jedna_komora(){ } /* * Analogicznie przetestuj dwie komory */ void test_dwie_komory(){ } /* * Znajdź z_min i z_max * W pętli z od z_min do z_max dla 100 punktów * Wypisz powierzchnię(z), przybliżoną objętość (całkowanie metodą trapezów) */ void test_objetosc_odd(){ } /* * Oblicz całkowitą objętość komór * W pętli od 0 do V oblicz głębokość dla v * Wypisz v, d, i powierzchnię(d) */ void test_poziom_wody_odv(){ }