Napisz bezparametrową procedurę/funkcję BUKIET, po wywołaniu której na ekranie powstanie rysunek taki, jak poniżej. Długości boków dużych kolorowych rombów wynoszą 60, a małych – 15.
Rysunek składa się z kwiatków złożonych z czterech rombów w różnych kolorach. Niektóre kwiatki mają kolory zamienione. Praktycznym podejściem jest napisanie procedury do rysowania kwiatka w taki sposób, aby można było ustalić kolejność kolorów oraz rozmiar. W ten spoób będzie możliwe rysowanie wszystkich kwiatków w tym nawet największego pośrodku ekranu. W celu uniknięcia pisania długiego kodu rysowania kwiatka należy napisać procedurę do rysowania rombu:
Procedura BUKIET_romb akcpetuje trzy argumenty: :a - długość boku rombu, :k - kierunek skrętu (tj. czy romb ma być rysowany od danego punktu na lewo k = -1 czy na prawo k = 1) oraz kolor :kol, który ustala wypełnienie rombu.
Na podstawie procedury rysującej romby można napisać funkcję rysującą kwiatek:
Procedura akceptuje trzy argumenty: :a - długość boku rombu z które składa się kwiatek, oraz dwa kolory :kol1 i :kol2, które zostaną użyte do zamalowania kwiatka.
Procedura główna jest bardzo długa, ale można w niej wyszczególnić poszczególne etapy. Na początku (2. - 3.) ustalamy kolory i (4.) rysujemy duży kwiat, ale bez koloru. Dzięki temu wokół głównego kwiatu powstanie później obramowanie. (5. - 17.) Następnie rysujemy dalszą część obramowania (tj. wszystkie lini w tle obrazka).
Pozostały kod rysuje pozostałe kwiatki odpowiednio przestawiając kolory. W celu lepszego zrozumienia polecam dopisać na koniec każdej pętli polecenie czekaj 1000, aby na spokojnie obejrzeć co po kolei jest rysowane.
Napisz dwuparametrową procedurę/funkcję WARSTWY, po wywołaniu której na środku ekranu powstanie rysunek składający się z tylu przylegających do siebie warstw kwadratów, ile wynosi wartość pierwszego parametru (od 1 do 25). Drugi parametr określa długość boku kwadratu stanowiącego dolną warstwę (od 100 do 200). Każda kolejna warstwa położona wyżej, zawiera o jeden kwadrat więcej. Szerokość każdej warstwy jest identyczna, kwadraty wewnątrz warstwy są tej samej wielkości, a lewe krawędzie poszczególnych warstw położone są na jednym odcinku.
W celu narysowania rysunku na środku ekranu to trzeba znać zarówno jego wysokość jak i szerokość. Najprotszym sposobem na wyznaczenie wysokości będzie (2. - 5.) wywołanie pętli dla :n poziomów, ale jedynie po to, aby zsumować odpowiednie wartości. Mając już wysokość (6. - 9.) można przejść do rysowania.
(10.) Każda rysowana warstwa jest złożona z (11.) tylu elementów jaki jest aktualny numer poziomu, wartość musimy zapamiętać, aby wykorzystać to do (12. - 18.) rysowania jednego poziomu. Pamiętajmy, że bok kwadratu na poziomie :ile wynosi :a/:ile.
Napisz jednoparametrową procedurę/funkcję WARKOCZ, po wywołaniu której na środku ekranu powstanie rysunek plecionki takiej, jak te przedstawione poniżej. Wysokość rysunku wynosi 54. Parametr określa liczbę powtarzających się fragmentów warkocza i może przyjmować wartości od 1 do 7.
Zadanie można uprościć do rysowania w kółko jednego symbolu i zamiany koloru. Dopiero po narysowaniu wszystkich kolorowych elementów zostanie nałożona na nie siatka. To znacząco upraszcza zadanie. Na początek procedury rozpoczynamy od zadeklarowania kilku zmiennych:
Ustalane zmienne to (2.) kolejność kolorów, (3.) wysokość rysunku, (4.) bok pojedynczego kwadratu oraz (5.) jego przekątna. Dodatkowo potrzebujemy wiedzieć (6.) z ilu przekątnych składa się podstawa oraz (7.) ile jest do narysowania elementów. Potem (8. - 11.) przechodzimy do rysowania.
W dalszej części kodu: (12. - 16.) rysujemy figurę w lewym dolnym rogu oraz (19. - 29.) wszystkie znajdujące się pomiędzy pierwszą i ostatnią. Kolor ustalamy (22.) wybierając cyklicznie kolejny element z dostąpnej listy kolorów.
W tym momencie znajdujemy się w prawym dolnym rogu i musimy zmienić (39.) listę kolorów oraz (40.) zresetować licznik wyboru koloru, aby rozpocząć rysowanie górnej warstwy. (43. - 64.) Rysowanie górnej warstwy odbywa się w identyczny sposób jak dolnej.
Rysunek jest już prawie ukończony, ale brakuje jeszcze podziału rysunku na kwadraty. Choć nie jest to widoczne na pierwszy rzut oka to zamiast rysować kwadraty to można narysować zygzaki, które po odpowiednim narysowaniu zaczną tworzyć kwadraty. Końcówka kodu używa dodatkowej procedury WARKOCZ_zygzak.
Rysowanie zygzaków polega na rysowaniu dwóch prostopadłych kresek pod kątem 45 stopni.
Napisz dwuparametrową funkcję PIRAMIDA, której wynikiem jest łączna długość odcinków tworzących piramidę. Pierwszy parametr określa liczbę poziomów piramidy, a drugi – długość boku każdego z kwadratów. Każdy z parametrów może przyjmować wartości od 1 do 1000.
PIRAMIDA 4 30 | jest 840 |
---|---|
PIRAMIDA 5 10 | jest 400 |
W celu zliczenia wszystkich elementów należy najpierw spojrzeć na każdy poziom jak na niedokończoną od dołu piramidę. Wtedy można zauważyć, że pierwszy poziom ma 3 kreski, drugi 5, trzeci 7 itd. W ten sposób na n poziomach będzie 3 + 5 + 7 + .. + (2n + 1) odcinków, ale jeszcze należy doliczyć dolny odcinek złożony z n odcinków. To rozumowanie zostało zaimplementowane w poniższej funkcji PIRAMIDA: