Napisz procedurę bez parametrów o nazwie RYBKA, która tworzy na środku ekranu możliwie duży następujący rysunek rybki złożony z łuków i odcinków prostoliniowych.
Programowanie takich rysunków dobrze jest zacząć - dla uchwycenia właściwych proporcji - od szkicu na pokratkowanej kartce papieru.
Rysunek składa się z prostych odcinków oraz łuków. Napisanie kodu rysującego kolejne części rysunku nie powinno stanowić problemu. Jednak przed przystąpieniem należy napisać procedurę luk, która będzie rysowała ćwierć okręgu. Procedura będzie przyjmowała dwa argumenty: :r - określa promień okręgu, którego fragment jest rysowany oraz :k - pozwoli zmienić kierunek rysowania. Dla wartości :k = 1 procedura narysuje fragment okręgu w prawo, a dla :k = -1 w lewo.
(2.) W procedurze dodatkowo zadeklarowana jest zmienna :n. Pozwala ona sterować dokładność z jaką będzie rysowany łuk. (3.) Fragment koła będzie rysowane jako :n małych odcinków. (4.) Każdy odcinek ma długość , a (5.) kąt skrętu to
Główna funkcja RYBKA to lista kolejnych kroków rysowania obrazku. Warto tu jednak zwrócić uwagę na (2.) ustalenie wysokości obrazku, (3.) wyliczenie promienia okręgów.
Napisz procedurę bez parametrów o nazwie ZNACZEK, która tworzy na ekranie możliwie duży następujący rysunek:
Tym razem zadanie można podzielić na trzy procedury: pierwsza rysuje figurę przypominającą literę K, druga rysuje cztery takie figury tworzące pierścień, a ostatnia główna ZNACZEK narysuje większą i mniejszą część obrazu wynikowego. Procedura rysująca pojedynczą figurę wygląda następująco:
Zastosowana funkcja wielokąt pozwala w wygodny sposób określić, że figura powinna być wypełniona czarnym kolorem.
Cztery takie same symbole są rysowane przy pomocy procedury ZNACZEK_4k. Warto zwrócić uwagę, że funkcja przyjmuje parametr :a, który określa szerokość najkrótszego odcinka w symbolu.
(2. - 7.) Przesuwa w lewy dolny róg rysowanej części. (8.) Cztery razy jest: (9.) rysowany pojedynczy symbol i (10. - 13.) odpowiednio przesuwany żółw.
Ostatnia główna procedura ZNACZEK wygląda następująco:
(2.) Ustalenie maksymalnej wysokości rysunku. (3.) Obliczanie długości najkrótszego odcinka w większym symbolu. (4.) Narysowanie większego pierścienia symboli. Następnie (5.) powrót i (6.) narysowanie 3 razy mniejszego fragmentu.
Rysunek przedstawia cztery siatki o złożoności odpowiednio 1, 2 oraz 3. Są one przykładami figur jednobieżnych; można je narysować bez odrywania ołówka od papieru, kreśląc każdy jednostkowy odcinek dokładnie jeden raz.
Napisz procedurę SIATKA :n rysowania w sposób jednobieżny takich siatek o dowolnym stopniu złożoności :n.
Po wywołaniu procedury SIATKA z dowolną wartością parametru :n od 1 do 10, żółw powinien wykreślić na ekranie możliwie duży rysunek siatki o złożoności :n. Powinien zacząć i skończyć kreślenie w tym samym węźle siatki i przebiec dokładnie jeden raz przez każdy jednostkowy odcinek siatki. Żółw powinien być widoczny, po narysowaniu każdego odcinka powinien odczekać chwilę, aby było widać, jak jest tworzona figura.
Zadanie nie jest proste. W celu lepszego zrozumienia warto przekręcić rysunek o . Jeśli chodzi o sposób rysowania to proponuje zrobić to na podstawie gotowego kodu - każdy odcinek jest rysowany z drobnym opóźnieniem. (Zgodnie z treścią polecenia.)
Poniżej został przedstawiony kod aplikacji bez komentarza. W celu zrozumienia co po kolei rysuje linijka zapraszam do artykułu o figurach jednobieżnych i fragmentu Siatka kwadratów, gdzie po kliknięciu w obrazek zostanie odtworzona animacja rysowania figury.
Umówmy się, że kwadrat dzielimy na n części w następujący sposób:
Poniższy rysunek przedstawia podział kwadratu na odpowiednio 6 oraz 9 części.
Napisz procedurę z jednym parametrem PODZIAŁ :n, która dla dowolnej wartości naturalnej :n, nie mniejszej niż 1 i nie większej niż 20, tworzy na środku ekranu możliwie duży rysunek kwadratu podzielonego na :n części (zgodnie z podanymi zasadami).
Uwaga. Twoja procedura może kreślić odcinki tworzące rysunek kwadratu podzielonego na :n części w dowolnej kolejności, ale ostateczny rezultat - rysunek na ekranie musi być zgodny z określonymi wyżej warunkami. Dla :n = 1 procedura powinna narysować odpowiednio duży (nie podzielony) kwadrat.
Podane zadanie najłatwiej wykonać w sposób iteracyjny. W zależności od parzystości numeru powtórzenia wystarczy narysować kolejny kwadrat, albo podzielić go na dwie części:
(2.) Ustalamy maksymalną wysokość rysunku. (3. - 8.) Przesunięcie żółwia w lewy dolny róg obszaru rysowania. Potem (9.) :n razy: (10.) sprawdzamy czy numer powtórzenia jest nieparzysty. Jeśli tak to (11. - 14.) należy narysować kwadrat i (15. - 17.) przesunąć żółwia na środek jego dolnego boku, a żółwia ustawić pionowo do góry. (19.) Jednak jeśli numer powtórzenia jest parzysty to należy podzielić kwadrat na dwie równe części czyli: (19.) narysować kreskę o długości boku ostatnio rysowanego kwadratu, (20.) cofnąć się i (21.) zasygnalizować, że następny kwadrat ma być cztery razy mniejszy (czyli musi mieć każdy bok dwa razy krótszy).