Napisz procedurę POSADZKA rysowania posadzki dokładnie takiej jak poniżej.
Zadanie podzielimy na dwie procedury: pomocnicza będzie rysować pojedynczą figurę. Z kolei główna funkcja wyśrodkuje odpowiednio rysunek i wywoła funkcję pomocniczą.
Figura składa się z trójkątów równobocznych. Możemy wyszczególnić w niej część, która powtarza się dwa razy. Zakładamy, że całą figurę wpisujemy w kwadrat, dlatego na początek przesuwamy do góry o .
(1.) Funkcja pomocnicza przyjmuje argument :a. Określa on długość boku pojedynczego trójkąta. (2.) Przesuwamy z podniesionym pisakiem na pozycję od której zaczynamy rysować. (3.) Do rysowania używamy funkcji wielokąt: (4.) określamy kolor wypełnienia i (5.) trzy razy (6. - 16.) rysujemy identyczne części. Na koniec (19.) wracamy do punktu wyjścia.
Pozostaje teraz napisać funkcję główną POSADZKA. Będziemy z niej wywoływać funkcję pomocniczą:
(1.) Procedura POSADZKA nie przyjmuje parametrów. (2.) Ustalamy długość najmniejszego trójkąta. (Można tu wstawić konkretną wartość). (3. - 8.) Przesuwamy żółwia przy podniesionym pisak w lewy, dolny róg rysunku. (9.) Będziemy rysować 4 rzędy wzoru, a w każdym rzędzie (10.) o jeden mniej symbol. W i-tym rzędzie mamy 5-i symboli. (11.) Rysujemy wzór i (12. - 16.) przesuwamy się w prawo z podniesionym pisakiem, aby móc narysować kolejny. Po zakończeniu rysowania całego rzędu (18. - 23.) przesuwamy pisak do rzędy wyżej do początku rzędu.
Siatka trójkątów o stopniu złożoności n to duży trójkąt równoboczny podzielony na mniejszych (jednostkowych) trójkątów równobocznych.
Rysunek przedstawia trzy siatki równoboczne o złożoności 1, 2 oraz 3. Siatki trójkątów są przykładami figur jednobieżnych, można je narysować bez odrywania ołówka od papieru, kreśląc każdy jednostkowy odcinek dokładnie raz.
Napisz procedurę SIATKA :n rysowania w sposób jednobieżny takich trójkątnych siatek o dowolnym stopniu złożoności.
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 wybranym rogu siatki i przebiec dokładnie jeden raz przez każdy jednostkowy odcinek siatki.
Zadanie z pozoru jest proste. Jednak brak możliwości przesunięcia po tej samej linii dwa razy znacznie utrudnia całe zadanie. Niemniej warto zauważyć, że siatkę możemy rysować rzędami. W każdym rzędzie rysujemy odpowiednią ilość trójkątów, ale nie rysujemy podstaw, a w przypadku ostatniego trójkąta rysujemy tylko jeden bok. Potem przechodzimy do rysowania kolejnego rzędu itd. Na koniec rysunek musimy uzupełnić dwoma liniami prawy bok oraz podstawę. W ten sposób działa poniższy kod:
(1.) Procedura SIATKA zgodnie z zadaniem przyjmuje parametr :n określający złożoność siatki. (2.) Ustalamy maksymalną wysokość figury (ułatwi powiększanie / zmniejszanie rozmiaru rysunku). (3.) Wyliczamy bok :a pojedynczego trójkąta. Korzystamy tu z przekształcenia wzoru na wysokość trójkąta równobocznego: . (3. - 8.) Przesuwamy żółwia w lewy, dolny róg rysunku. (9.) Będziemy rysować :n rzędów. (10.) Z kolei w i-tym rzędzie narysujemy (11. - 15.) :n - i trójkątów podstaw, (17., 18.) tylko jeden bok trójkąta, a (19.) następnie obracamy się i (20.) przechodzimy na początek kolejnego rzędu. Tam z kolei (21.) obracamy się, aby być tak samo ustawionym jak na początku rysowania poprzedniego rzędu. Po zakończeniu pętli głównej (23. - 26.) rysujemy ostatnie dwa boki.
Wielokąty przedstawione na rysunku to tak zwane spiroboki o różnych stopniach złożoności: 1, 4 oraz 13.
Napisz procedurę SPIROBOK :n rysowania spiroboków o dowolnym stopniu złożoności :n. Po wywołaniu procedury SPIROBOK z dowolną wartością parametru :n, nie mniejszą niż 1 i nie większą niż 40, na ekranie powinien powstać rysunek spiroboku o złożoności :n.
Rysowanie spirali to w rzeczywistości rysowanie odcinków prostopadłych do siebie. Pierwszy z nich ma długość :a, a każdy kolejny jest większy od poprzedniego o długość najmniejszego odcinka. Rysowanie spirali można rozdzielić na dwie części. Pierwsze z nich polega na narysowaniu "zewnętrznych" krawędzi - wtedy obracamy żółwia za każdym razem o . Z kolei drugą pętla będzie rysować "wewnętrzne" krawędzie. Tym razem z kolei będziemy obracać o i zmniejszać krawędzie. Pętle musimy uzupełnić kilkoma dodatkowymi kreskami. Zadanie to realizuje poniższy kod:
(2.) Ustalamy wysokość pomiędzy dwoma liniami równoległymi. (3.) Ustalamy, że odległość ta nigdy nie będzie większa niż 40. W przypadku, gdy tak jest to zmieniamy :w na 40. (4.) Rysujemy linię uzupełniającą o długości :w i (5.) obracamy żółwia w prawo. (6.) Zmienna :a będzie przechowywać aktualną długość rysowanej linii. (7. - 11.) Rysujemy :n - 1 linii z których każda kolejna jest dłuższa o :w i jest prostopadła do poprzedniej. W tym przypadku za każdym razem skręcamy w prawo o . (12.) Rysujemy drugą taką samą linie jak ostatni. (W tym momencie znajdujemy się na zakończeniu spirali.) (13.) Rysujemy kolejny najkrótszy odcinek, długości :w, a następnie (16.) będziemy rysować linie wewnętrzne. W każdej iteracji linia jest mniejsza o :w, prostopadła do poprzedniej, a żółw skręca za każdym razem w lewo o . (17. - 21.) Rysujemy :n takich linii. Na koniec (22.) skręcamy w prawo i (23.) dorysowujemy ostatni fragment. (24.) Rysunek został zakończony.
Rysunek przedstawia mapę rzędu 3.
Mapa rzędu n jest kwadratową siatką kropek, utworzoną z 2n+1 poziomych rzędów po 2n+1 kropek w każdym rzędzie. Środkowe punkty na zachodniej, północnej, wschodniej i południowej krawędzi mapy oznaczamy odpowiednio literami W, N, E oraz S.
Trzeba ułożyć trasę WNESW, to znaczy taką trasę, która spełnia następujące warunki:
Rysunek przedstawia 4 różne trasy WNESW na mapie rzędu 3.
Napisz procedurę TRASA :n, która dla dowolnej wartości parametru :n nie mniejszej niż 1 i nie większej niż 6:
Procedurę należy napisać w taki sposób, aby każda trasa WNESW (tj. spełniająca warunki 1, 2 i 3) mogła być efektem jej wykonania.
Podczas rozwiązywania tego zadania należy pamiętać, że podczas przechodzenia z dowolnego kierunku świata na drugi wykonamy maksymalnie 2*:n razy z czego pionowo przesuniemy się :n razy. Poziomo przesuniemy się tyle samo razy. Zadanie podzielimy na dwie części: procedura główna narysuje siatką oraz wypisze kierunki świata i uruchomi procedurę pomocniczą, która wylosuje trasę.
(1.) Funkcja pomocnicza TRASA_pom przyjmuje dwa argumenty: :a - pozioma odległość pomiędzy dwoma punktami, :max - określa ile kresek pionowych i poziomych rysujemy. (2., 3.) Określamy licznik przesunięć pionowo (P) / poziomo (S). (4.) Dopóki oba liczniki są mniejsze od :max (5.) losujemy kierunek przesunięcia. Jeśli wylosowana liczba to 0 to (6., 7.) wykonujemy poziomą linię i zwiększamy licznik :P. W przeciwnym przypadku (9. - 11.) rysujemy pionową kreskę i tym razem (12.) zwiększamy licznik :S. Kiedy choć jeden licznik osiągnie wartość :max. (15., 16.) Sprawdzamy, których kresek brakuje i je dorysowujemy. W rzeczywistości wykonana zostanie dokładnie tylko jedna z pętli dopóki.
W funkcji głównej TRASA możemy wyszczególnić trzy części: podpisanie kierunków świata, rysowanie siatki i rysowanie wylosowanej trasy.
Na początek (2.) wyliczamy odległość :a. Jest to odległość pomiędzy dwoma najbliższymi punktami. (3.) Podnosimy pisak. (4. - 11.) Dla każdego kierunku świata ustalamy odpowiednio pozycję żółwia i wypisujemy kierunek. Po zakończeniu (12.) wracamy na środek ekranu.
Przed narysowaniem siatki (13. - 16.) przesuwamy żółwia w lewy, dolny róg rysunku i (17. - 27.) rysujemy siatkę. Kropki stawiamy przy pomocy kropka. Po zakończeniu rysowania siatki znajdujemy się w prawym dolnym rogu, dlatego (28. - 30.) musimy wrócić na środek dolnej krawędzi.
W ostatniej części (31.) rysujemy cztery (32.) wylosowane trasy. Na koniec rysowania trasy skręcamy o .