Strona główna » Poradniki » Logomocja » LOGIA » Logia 1996/97 - Etap I
 

Logia 1996/97 - Etap I

· Etap I · Etap II · Etap III ·
iOryginalna treść zadań jest dostępna pod oficjalnym adresem konkursu LOGIA

Zadanie 1

Napisz procedurę bez parametrów o nazwie ROZETA, która tworzy na środku ekranu następujący rysunek:

Obrazek 1 do zadania 1

W celu uproszczenia zadania w rozwiązaniu znalazły się dwie procedury pomocnicze. Jedna z nich rysuje gwiazdkę złożoną z deltoidów oraz druga, która rysuje trójkąt równoboczny wyśrodkowany w pozycji żółwia. Pierwsza procedura ORNAMENT_gwiazd rysuje gwiazdę złożoną z sześciu deltoidów:

  1. oto ROZETA_gwiazd :a
  2.   powtórz 6[
  3.       lw 30
  4.       np :a
  5.       pw 60
  6.       np :a
  7.       pw 120
  8.       np :a
  9.       pw 60
  10.       np :a
  11.       lw 150
  12.   ]
  13. już

Cały kod opiera się na (2.) narysowaniu 6: (3. - 12) deltoidów.

Kolejna procedura ROZETA_troj rysuje trójkąt równoboczny o boku :a tak, żeby żółw przed i po rysowaniu znalazł się pośrodku narysowanego trójkąta:

  1. oto ROZETA_troj :r :a
  2.   pod
  3.   ws :r
  4.   pw 90
  5.   ws :a
  6.   lw 60
  7.   opu
  8.   powtórz 3[
  9.   np :a*2
  10.   pw 120
  11.   ] pod
  12.   pw 60
  13.   np :a
  14.   lw 90
  15.   np :r
  16.   opu
  17. już

(1. - 6.) Przesuwamy żółwia do lewego dolnego rogu rysowanego trójkąta. Następnie (7. - 10.) rysujemy trójkąt i (11. - 16.) wracamy do punktu z którego rozpoczęliśmy procedurę.

Zadaniem funkcji ROZETA będzie narysowanie koła i wywołanie odpowiednio dwóch funkcji pomocniczych. Warto zauważyć, że wewnątrz obrazka trójkąta i gwiazdki jest ich mniejsza kopia:

  1. oto ROZETA
  2.   niech "r 200
  3.   niech "a :r / (2*pwk(3))
  4.   okrąg 2*:r
  5.   powtórz 2[
  6.       ROZETA_gwiazd 2*:a/npw
  7.       ROZETA_troj :r/2/npw :a*3/npw
  8.       pw 60
  9.       ROZETA_troj :r/2/npw :a*3/npw
  10.   ]
  11.   powtórz 6[
  12.       np :r
  13.       ws :r
  14.       pw 60
  15.   ]
  16. już

(2.) Określamy promień koła i na tej podstawie (3.) obliczamy bok najmniejszego trójkąta na obrazku. (4.) Rysujemy okrąg. (5.) Rysujemy dwa powtórzenia kombinacji: (6.) gwiazdki, (7.) trójkąta i (8., 9.) jego obróconej wersji. (10. - 14.) Na koniec uzupełniamy rysunek brakującymi liniami.

Zadanie 2

To jest rysunek gwiazdki:

Obrazek 1 do zadania 2
  • Napisz procedurę GWIAZDKA :r, z jednym parametrem, która powoduje narysowanie na ekranie, wokół środka wyznaczonego przez aktualną pozycję żółwia, gwiazdki o danym rozmiarze :r. Zakładamy, że rozmiar gwiazdki jest określony przez długość boku środkowego sześciokąta.
  • Napisz procedurę bez parametrów o nazwie ORNAMENT, która tworzy na środku ekranu możliwie duży ornament złożony z 7 gwiazdek:
Obrazek 2 do zadania 2

Podczas rysowania gwiazdki warto napisać funkcję tak, aby rysunek był wyśrodkowany w miejscu skąd żółw rozpoczyna jej rysowania. Pozwoli to zmniejszyć problem ustawiania gwiazdki w drugiej części zadania.

  1. oto GWIAZDKA :r
  2.   pod
  3.   ws :r/2
  4.   pw 90
  5.   ws :r/2*pwk(3)
  6.   lw 90
  7.   opu
  8.   powtórz 6[
  9.     np :r
  10.     pw 60
  11.   ]

Pierwszy etap rysowania gwiazdki polega na (2. - 7.) przesunięciu żółwia do lewego dolnego rogu sześciokąta i (8. - 11.) jego narysowaniu.

  1.   pod
  2.   np 2*:r
  3.   opu
  4.   niech "h :r/2*pwk(3)
  5.   niech "h2 :h/2*pwk(3)
  6.   powtórz 6[
  7.     np 4*:h2
  8.     ws 4*:h2
  9.     pw 30
  10.     np 2*:h
  11.     pw 120
  12.     np 2*:h
  13.     lw 150
  14.     np 4*:h2
  15.     ws 4*:h2
  16.     pw 60
  17.   ]
  18. już

W drugim etapie najpierw (12. - 14.) przesuwamy żółwia. Następnie wyliczamy dwie zmienne: (15.) :h - bok trójkątów z których jest złożona gwiazdka oraz (16.) :h2 - jest to wysokość najmniejszego trójkąta. (17.) Rysujemy 6 razy: (18. - 19.) lewy odcinek odstający, (20. - 24.) dwa boki trójkąta tj. ramię gwiazdki i (25 - 26.) drugi odstający odcinek. Na koniec (27.) obracamy żółwia o , aby prawidłowo narysował dalej.

Z tak napisaną procedurę łatwo napisać procedurę ORNAMENT:

  1. oto ORNAMENT
  2.   niech "r 20
  3.   GWIAZDKA :r
  4.   wróć
  5.   powtórz 6[
  6.       pw 60*(npw - 1) - 30
  7.       pod
  8.       np 7*:r
  9.       opu
  10.       skieruj 0
  11.       GWIAZDKA :r
  12.       wróć
  13.   ]
  14. już

(2.) Ustalamy bok sześciokąta w gwiazdce, tu 20 idealnie pasuje. (3.) Rysujemy środkową gwiazdkę. Następnie rysujemy (6.) 6 gwiazdek: (7.) obracamy się w stronę środka kolejnej gwiazdki i (8. - 10.) tam się przesuwamy. (11.) Obracamy żółwia do góry i (12.) rysujemy gwiazdkę. (13.) Na koniec pętli wracamy na środek ekranu.

Zadanie 3

Napisz procedurę bez parametrów o nazwie N_Z, która tworzy na środku ekranu następujący rysunek:

Obrazek 1 do zadania 3

Zadanie dzielimy na dwa pomniejsze: procedura pomocnicza będzie rysować literę N i Z, a druga dobierze miejsce i parametry, aby prawidłowo narysować wzór. Literę rysujemy następująco:

  1. oto N_Z_n :a
  2.   powtórz 2[
  3.     np :a*3
  4.     pw 90
  5.     np :a
  6.     pw 45
  7.     np :a*pwk(2)
  8.     lw 135
  9.     np :a
  10.     pw 90
  11.     np :a
  12.     pw 90
  13.   ]
  14. już

(2.) Dwa razy rysujemy (3. - 11) identyczny fragment rysunku i (12.) obracamy za każdym razem o .

  1. oto N_Z
  2.   niech "h 400
  3.   niech "a 400/16
  4.   pod
  5.   ws :h/2
  6.   pw 90
  7.   ws :h/2
  8.   lw 90
  9.   opu
  10.   powtórz 4[
  11.     np :h
  12.     pw 90
  13.   ]

(2.) Ustalamy maksymalną wysokość obrazka i (3.) najkrótszy odcinek litery N. (4. - 9.) przesuwamy żółwia w lewy dolny róg rysunku i (10. - 13.) rysujemy obramowanie.

  1.   pod
  2.   np :a/2
  3.   pw 90
  4.   np :a/2
  5.   lw 90
  6.   opu
  7.   powtórz 4[
  8.     powtórz 3[
  9.       N_Z_n :a
  10.       pod
  11.       np :a*4
  12.       opu
  13.     ]
  14.     pod
  15.     np :a*3
  16.     opu
  17.     pw 90
  18.   ]

(14. - 19.) Przesuwamy żółwia w lewy dolny róg najbliższej litery N. (20.) Następnie rysujemy 4 serie (21.) po 3 znaki: (22.) rysujemy literę N i (23. - 25.) przesuwamy do przodu i wysokość litery + :a (czyli 4*:a). (27. - 29.) Na koniec każdej serii przesuwamy się do przodu i (30.) skręcamy w prawo.

  1.   ]
  2.   pod
  3.   np :a*4
  4.   pw 90
  5.   np :a*4
  6.   lw 90
  7.   opu
  8.   N_Z_n :a*7/3
  9. już

Ostatni etap polega na (32. - 37.) przesunięciu rysowania w lewy dolny róg największej litery N i (38.) jej narysowaniu. W tym przypadku warto zauważyć, że najmniejszy jej odcinek to mniejszego odpowiednika.