Autorské riešenie
[stiahni]

Na vyriešenie tejto úlohy potrebujeme vyriešiť niekoľko menších, čiastkových úloh. Poďme pekne poporiadku podľa toho, aké vlastnosti by mal korytnačí pantograf mať.

Najskôr nastavme správne posúvač p1. Keďže by pantograf mal umožniť nastaviť pomer prekresľovania od 0.1 do 2 s krokom 0.1, musí mať minimálne 20 stavov. Krok posúvača je vždy 1, budeme teda musieť tieto hodnoty prepočítať a správne zobraziť v textovom políčku pomer. Na toto si vytvorme procedúru a nazvime si ju zobrazPomer. Procedúru zavoláme vždy pri zmene posúvača.

Procedúra zobrazPomer môže vyzerať nasledovne:

viem zobrazPomer
  pomer'nechHodnota p1/10
koniec

Predelením hodnoty posúvača p1 číslom 10 dostaneme požadované hodnoty od 0.1 (ak hodnota posúvača je 1) po 2 (ak hodnota posúvača je 20).

Pri kreslení kópie využijeme súradnice korytnačky k1. Pomocou nich budeme premiestňovať korytnačku k2 tak, aby kreslila pôvodný obrázok v zadanom pomere. Je na nás, ako sa rozhodneme, v ktorej časti červenej plochy budeme kópiu obrázka vykresľovať. Najjednoduchšie je kópiu vykresľovať od stredu ľavej časti. Pozrime sa najskôr na nasledujúci obrázok:

Súradnice korytnačky k1 sú [x, y]. Týmto súradniciam zodpovedajú súradnice [x+400, y] korytnačky k2 v červenom obdĺžniku. Ak by sme korytnačku k2 presúvali na takéto súradnice, vytvorili by sme rovnako veľkú kópiu pôvodného obrázka. My ale chceme vytvoriť kópiu v nejakom pomere (zväčšenú alebo zmenšenú). Keďže v strede ľavej strany červeného obdĺžnika je bod [0, 0], stačí nám tieto súradnice prenásobiť zadaným pomerom: [pomer*(x+400), pomer*y].

Procedúra na pohyb korytnačky k2 podľa k1 môže vyzerať nasledovne:

viem presunK2
  k2'nechXYSur pomer*(400+k1'xSur) pomer*k1'ySur
koniec

Ostáva ešte vyriešiť situácie, keď chceme aby korytnačka k2 kreslila podľa k1 a keď sa má k2 len presunúť na novú pozíciu bez kreslenia. To vieme odlíšiť na základe udalostí, ktoré nastali pri korytnačke k1:

Ak stlačíme ľavé tlačidlo myšky (začíname kresliť) na korytnačke k1, tak k2 sa presunie na svoju novú pozíciu bez kreslenia. Ak však budeme korytnačkou k1 kresliť (budeme ju ťahať myškou), tak korytnačka k2 sa bude presúvať a zároveň kresliť čiaru za sebou. Ostáva ešte upraviť procedúru presunK2 tak, aby vedela odlíšiť, či má k2 čiaru kresliť alebo nie.

viem presunK2 :kresli
  ak2 :kresli [k2'pd]
              [k2'ph]
  k2'nechXYSur pomer*(400+k1'xSur) pomer*k1'ySur
koniec

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

Zaujímavé riešenie mali tímy Expert Baša a Saša (1) a Peter Ralbovský, ktorí presúvali korytnačku k2 už počas zmeny hodnoty pomeru na posúvači.

Častou chybou bolo, že korytnačka k2 kreslila čiaru aj keď sa mala presúvať bez nej.