Autorské riešenie
[stiahni]

Aby sme túto úlohu mohli vyriešiť, potrebujeme vyriešiť dva menšie problémy. Musíme zistiť, kde je stred heliportu a aký je veľký. Aj keď tieto dva problémy zdanlivo nesúvisia, môžeme ich riešiť súčasne. Pozrime si nasledujúci obrázok:

kruznica.gif, 10kB

Korytnačka sa nachádza niekde vo vnútri kruhu (červený krúžok). Ak sa vyberie ľubovoľným smerom(*), isto narazí na hranicu kruhu, napr. (1). Ak sa otočí o 180° a bude pokračovať presne opačným smerom, tak aj tu narazí na hranicu kruhu (2). Ak si pritom bude počítať, koľko krokov spravila (medzi 1 a 2), bude sa vedieť vrátiť do bodu (3), ktorý je v strede medzi nimi. Všimnime si, že ak sa teraz korytnačka otočí o 90° a vyberie sa tým správnym smerom, určite prejde stredom heliportu. Prečo je tomu tak? Kolmica (4)(5) na tetivu kružnice (1)(2) je množina bodov, ktoré sú rovnako vzdialené od bodov (1) a (2). Keďže kružnica je množina bodov rovnako vzdialená od stredu, tak stred sa musí nachádzať niekde na kolmici (4)(5). Ak však korytnačka spraví to isté ako predtým, dostane sa do stredu, medzi dva body kružnice (4) a (5). A tento bod nie je nič iné, ako stred heliportu. V tomto okamžiku je korytnačka v strede a zároveň vie, aký má heliport priemer a polomer. Celý postup môže vyzerať takto:

viem vymalujHeliport
 opakuj 2 [
  kym [farbaBodu <> "cierna] [
   do 1
  ]
  vz 1
  urobtu "pocetKrokov 0
  kym [farbaBodu <> "cierna] [
   vz 1
   urobtu "pocetKrokov :pocetKrokov + 1
  ]
  do :pocetKrokov / 2
  vp 90
 ]
 urobtu "priemer :pocetKrokov + 2
koniec

Korytnačka sa vyberie "nejakým" smerom, až kým nenarazí na čiernu farbu. Vráti sa o krok späť (aby sa dostala na bielu farbu) a bude cúvať kým nenarazí na čiernu farbu. Zároveň si počíta (v premennej "pocetKrokov), koľko krokov musí spraviť. Ak dorazí na čiernu, vráti sa spať o polovičný počet krokov. Otočí sa o 90° a celý postup zopakuje. Ostáva teda stáť v strede heliportu. Keďže pri svojej pochôdzke rátala len kroky vo vnútri kruhu, priemer heliportu bude o 2 väčší. Zaráta do neho aj šírku hranice (urobtu "priemer :pocetKrokov + 2). Ostáva už len nakresliť a vymaľovať heliport. Celá procedúra môže vyzerať nasledovne:

viem vymalujHeliport
 opakuj 2 [
  kym [farbaBodu <> "cierna] [
   do 1
  ]
  vz 1
  urobtu "pocetKrokov 0
  kym [farbaBodu <> "cierna] [
   vz 1
   urobtu "pocetKrokov :pocetKrokov + 1
  ]
  do :pocetKrokov / 2
  vp 90
 ]
 urobtu "priemer :pocetKrokov + 2

 nechFP "cierna
 bod :priemer
 nechFP "cervena
 bod 2 * :priemer / 3
 nechFP "cierna
 bod :priemer / 3

koniec

Tým sme celú úlohu vyriešili.

(*) Poznámka: Tvrdenie, že "Ak sa korytnačka vyberie ľubovoľným smerom, isto narazí na hranicu kruhu" platí v matematike. Pri kreslení na obrazovku počítača dochádza k istému skresleniu, kružnica nie je čiara, ale postupnosť čiernych bodiek. Ak by sa korytnačka vybrala "nevhodným" smerom, nemusela by na bod kružnice natrafiť. Napr.:

Aby tento prípad určite nenastal, korytnačka by mala hľadať hranice v smere zvislom alebo vodorovnom.

Vaše zaujímavé riešenia a najčastejšie chyby

Väčšina z vás vyriešila túto úlohu takmer správne. Najčastejšou chybou bolo, že ste do priemeru nezapočítali hrúbku samotnej kružnice, ktorou bol vyznačený heliport. Rátali ste len s veľkosťou vnútra kružnice (biely kruh). Tá ma však o 2 menši priemer ako kružnica samotná.