Napisz bezparametrową procedurę POSADZKA, która kreśli na środku ekranu następujący fragment arabskiej posadzki.
Obrazek składa się z 19 identycznych fragmentów. Przyjmijmy, że długość boku sześciokąta w takim pojedynczym fragmencie to a. Wtedy procedura rysująca pojedynczy fragment przedstawia się następująco:
(2. - 4.) Przejdź do rysowania sześcioboka, (5. - 8.) narysuj go, a następnie (9. - 11.) wróć do pozycji wyjściowej. Kolejnym etapem będzie teraz narysowanie pozostałej części rysunku. W tym przypadku warto zauważyć, że ten fragment kodu można narysować dwa razy z przesunięciem o 60 stopni.
(12.) Narysuj dwie identyczne części: (13. - 16.) Przejdź do rysowania fragmentu i (17. - 26.) Narysuj 3 identyczne fragmenty obrazka. Przyjmuje się, że długość dłuższego boku jednej odnogi to 1.5a, a krótszy to a/4 podanego boku sześciokąta rysowanego na początku. (27. - 31.) Po narysowaniu należy wrócić do pozycji początkowej i obrócić o 60 stopni. Po narysowaniu dwóch kopii należy wrócić do pozycji wyjściowej na początku procedury (33.) obracają żółwia w lewo o 120 stopni.
Pozostaje teraz tylko dopisać procedurę główną. W celu narysowania wszystkich fragmentów wystarczy narysować fragment pośrodku, a następnie dwa elementy do góry i jeden na prawo. W ten sposób rysowane jest wszystkie 19 elementów.
(2.) Ustal bok sześciokąta pojedynczego elementu oraz (3.) o ile należy przechodzić pomiędzy kolejnymi elementami. (4.) Narysuj 6 razy wspomnianą kombinację: (5. - 10.) 3 elementy w górę (tutaj za każdym razem rysowany jest też środkowy element). (11. - 15.) Przejdź w prawo i (16.) narysuj element. Koniec każdego z sześciu powtórzeń należy zakończyć (17. - 21.) powrotem do pozycji wyjściowej na początku iteracji, a następnie obróceniu o 60 stopni. Warto zauważyć, że dzięki temu, że elementy są identyczne po obróceniu o dowolną wielkrotność 60 stopni to nie trzeba sie martwić o nieprawidłowo obrócony element.
Napisz procedurę KOLCZATKA :n, która tworzy na środku ekranu możliwie duże rysunki tak zwanych kolczatek. Dana :n określa stopień złożoności kolczatki, może przyjmować wartości od 1 do 10. Rysunki poniżej przedstawiają kolczatki o złożoności 1, 2, 4 i 7.
W celu uproszczenie zadania warto napisać najpier procedurę KOLCZATKA_pom, która będzie przyjmować parametr :a - bok pojedynczego trójkąta.
Narysowanie pojedynczego elementu polega na (2.) narysowaniu 6 identycznych części. Każda z części składa się z (3. - 12.) czarnego deltoidu (dokładniej dwóch identycznych trójkątów), a następnie (13. - 21.) narysowaniu jasnszarego trójkątu. W ten sposób nie trzeba dodatkowo przesuwać żółwia do rysowania czarnego trójkąta. (22.) Na koniec każdej pętli należy pamiętać o obrocie o 60 stopni, aby kolejna część nie była rysowana w tym samym miejscu.
(2.) Ustal maksymalną wysokość rysunku i (3.) oblicz wysokość pojedynczego trójkąta. Można to zrobić zauważając, że ilość poziomów to podwojona złożoność :n plus dwa. (4.) Na podstawie wysokości można obliczyć bok trójkąta. (5. - 7.) Przejdź do pierwszego wiersza. (8.) Narysuj :n poziomów. W każdym poziomie (9. - 15.) narysuj odpowiednią ilość kolaczetek. Po narysowaniu całego wiersza (16. - 19.) przejdź do następnego wiersza.
Napisz procedurę KALEJDOSKOP :n, która tworzy na środku ekranu rysunki takie jak poniżej. Dana :n określa stopień złożoności rysunku i może przyjmować wartości od 1 do 5. Trójkąty i kwadraty wypełnione są losowo kolorami. Poniżej przykłady rysunków o złożoności 2 i 4. Wielkość rysunku jest stała niezależnie od stopnia złożoności.
Zadanie najłatwiej oprzeć o rozwiązanie rekurencyjne. Z tego powodu główna procedura KALEJDOSKOP wywoła funkcję pomocniczą i poda jej maksymalną wysokość pierwszego fragmentu oraz złożoność wprowadzoną prze użytkownika.
W rozwiązaniu rekurencyjnym najważniejszy jest warunek stopu. W tym przypadku przy przechodzeniu do kolejnej iteracji :n będzie zmniejszane o jeden, więc w przypadku, gdy :n nie będzie większe od 0 należy zaprzestać dalszego rysowania.
(2.) Jeśli jeszcze mają być rysowane kolejne poziomy to (3.) oblicz na podstawie maksymalnej wysokości mnożnik boków. (4. - 7.) Przejdź do lewego dolnego fragmentu rysunku.
(8.) Każda z części składa się z czterech identycznych części: (9. - 16.) trójkątu, (18. - 27.) prostokąta oraz (28. - 36.) trójkąta. Po narysowaniu wszystkich czterech boków (40. - 43.) należy wrócić do miejsca z którego rozpoczęło się rysowanie i (44.) wywołać wykonywanie z nową maksymalną wysokością rysunku i mniejszą złożonością.
Napisz procedurę DYWAN :n rysującą na środku ekranu kwadratowe dywany takie, jak na poniższych rysunkach. Dana :n określa stopień złożoności wzoru dywanu i może przyjmować wartości od 1 do 10. Poniżej przykłady dywanów o złożoności 1, 3, 5 i 6. Wielkość dywanu jest stała niezależnie od stopnia złożoności wzoru.
Generalnie obrazek składa się z 16 identycznych fragmentów. Pojedynczy fragment będzie rysować procedura DYWAN_pom na podstawie przekazanej długości boku :a oraz złożoności elementów :n. Poniżej znajduje się kod z wyjaśnieniem:
(2.) Oblicz różnicę pomiędzy kolejnymi wierzchołkami trójkątów we fragmencie. (3.) Narysuj cztery części - trójkąty. Za każdym razem zapamiętaj numer rysowanej części i (5. - 15.) narysuj wszystkie :n trójkątów wybierając na podstawie numeru części oraz numeru rysowanego trójkąta w części kolor. Po narysowaniu trójkąta (14.) przejdź o wyliczoną w (2.) linijce wartości :d. Po zakończeniu rysowania części (16. - 19.) Przejdź do następnego wierzchołka i skręć. (21.) Na koniec przywróć domyślny kolor pisaka.
(2.) Ustal maksymalną wysokość rysunku i na tej podstawie (3.) oblicz bok :a poejdycznego fragmentu. (4. - 7.) Przejdź do lewego, dolnego wierzchołka prawego, lewego fragmentu rysunku. (8.) Narysuj cztery wiersze po (9. - 15.) cztery fragmenty. Po narysowaniu wiersza (16. - 19.) przejdź do następnego wiersza.