Autorské riešenie
[stiahni]

Celú trasu vykreslíme pomocou jednotlivých úsekov. Tie sú určené začiatočným a koncovým bodom, v ktorom sa stúpanie mení na klesanie, alebo na opak, klesanie sa mení na stúpanie.

Pracovať budeme s číselnými údajmi v premennej kps. Ide o zoznam. Po použití jednotlivých hodnôt ich kvôli jednoduchšej manipulácii budeme z premennej odstraňovať (nie je potrebné zoznam uchovať).

Prvý úsek začína bodom s x-ovou súradnicou 0, y-ová súradnica je prvé číslo v premennej kps. Na túto pozíciu nastavíme korytnačku, vykreslíme na nej bod a súradnice tohto bodu uložíme do premennej zaciatok. V premennej zaciatok budeme mať uložené súradnice začiatku konkrétneho úseku trasy. V premennej v1 bude uložená nadmorská výška začiatočného bodu úseku.

Ďalej potrebujeme zistiť súradnice konca úseku. Z premennej kps získame dĺžku úseku (premenná d, na obrázku úsečka A1A2) a nadmorskú výšku koncového bodu (premenná v2). Z bodu A1 na obrázku sa potrebujeme presunúť najprv do bodu B a z neho do bodu A2. Dĺžka |BA2| je určená rozdielom nadmorských MiniKoriMobilvýšok v bodoch A1 a A2 (premenná rozdiel). Pomocou Pytagorovej vety vieme vypočítať aj dĺžku |A1B| (premenná dlzka).

Pomocou takto vypočítaných hodnôt sa v bode A1 otočíme doprava, prejdeme (so zdvihnutým perom) vzdialenosť určenú premennou dlzka (dostaneme sa do bodu B). V bode B sa otočíme vpravo, resp. vľavo podľa toho, či vykresľovaný úsek klesá alebo stúpa. Po otočení sa posunieme o vzdialenosť určenú premennou rozdiel.

V bode A2 zistíme súradnice korytnačky a uložíme ich do premennej koniec. Teraz sa vrátime do bodu A1 (jeho súradnice máme uložené v premennej zaciatok), pero položíme dole a presunieme sa do bodu A2 (jeho súradnice máme uložené v premennej koniec).

Môžeme kresliť ďalší úsek trasy - do premennej v1 presunieme hodnotu premennej v2, do premennej zaciatok uložíme obsah premennej koniec a celý postup budeme opakovať, kým zoznam kps údajov nebude prázdny.

Kvôli celkovému stúpaniu a klesaniu budeme do premenných stupanie a klesanie ukladať výškové rozdiely začiatku a konca každej trasy.

viem kresli
 znova ph nechhp 2
 urobtu "stupanie 0
 urobtu "klesanie 0

 ;korytnacku presunieme na suradnice startu nechxysur 0 prvy :kps
 bod 10

 ;v premennej zaciatok budeme mat ulozene ;suradnice bodu predchadzajucej zmeny profilu
 ;v tejto chvili su to suradnice startu
 urobtu "zaciatok vlozPo prvy :kps [0]

 ;nadmorska vyska bodu predchadzajucej zmeny profilu
 urobtu "v1 prvy :kps
 urob "kps bezPrveho :kps
 kym [nieje prazdny? :kps]
  [ph

  ;dlzka prejdeneho useku
   urobtu "d prvy :kps
   urob "kps bezPrveho :kps

  ;nadmorska vyska bodu aktualnej zmeny profilu
   urobtu "v2 prvy :kps
   urob "kps bezPrveho :kps

  ;na zaklade rozdielu nadmorskych vysok okrajov useku zistime, ci doslo ku klesaniu alebo
  ;k stupaniu ;zaroven sa pomocou neho dostaneme do koncoveho bodu useku
   urobtu "rozdiel :v1-:v2
   urobtu "dlzka zaokruhli(odmocnina(abs(:d*:d-:rozdiel*:rozdiel)))
   vp 90
   do :dlzka
   ak2 :rozdiel<0 [vl 90 urobtu "stupanie :stupanie+:rozdiel]
                  [vp 90 urobtu "klesanie :klesanie+:rozdiel]
   do abs(:rozdiel)

  ;zaznamename suradnice konca useku (aby sme sa sem neskor vedeli vratit a vykreslit usek)
   urobtu "koniec vlozPo xsur []
   urobtu "koniec vlozPo ysur :koniec

  ;vratime sa na zaciatok useku
   nechxysur prvy :zaciatok posledny :zaciatok
   pd

  ;s perom dole sa presunieme na koniec useku
   nechxysur prvy :koniec posledny :koniec

  ;vykreslenie bodu
   bod 10

  ;koniec useku je zaciatkom noveho useku, ktory ideme vykreslit
   urobtu "zaciatok :koniec
   urobtu "v1 :v2
   nechsmer 0
  ]
  pripis "Stúpanie: pis abs(:stupanie)
  pripis "Klesanie: pis :klesanie
koniec 

Najčastejšie chyby, komentár k vašim riešeniam