Komenskio Logo:
Programa Pamokos: Užsienio šalyse
 

Rekursija. Kaukių piešimas

Rekursija

Rekursija programavime – viena sunkiausių konstrukcijų. Trumpai rekursiją galima apibūdinti kaip procedūrą (ar funkciją), kuri kreipiasi pati į save. Logo kalboje rekursiniai algoritmai užtašomi gana paprastai ir vaizdžiai.

Pateiksime keletą rekursinių procedūrų pavyzdžių Komenskio Logo sistema, kuriuos išnagrinėjus bei atlikus kompiuteriu turėtų paaiškėti rekursinių procedūrų vykdymo esmė.

Pirmiausia sudarykime pagalbinę procedūrą, bet kokio spindulio apskritimui brėžti:

tai apskritimas :r
    kartok 360 [eisim priekin :r ~
        piešim taškelis ~
        eisim atgal :r kairėn 1]
taškas

Dabar galime braižyti įvairiausias iš apskritimų sudarytas figūras. Viena tokių būtų figūra, vadinama gausybės ragu. Piešinio esmė – mažėjantys apskritimai, kurių centrai išdėstomi ant kito apskritimo lanko. Šiai figūrai brėžti lengva sudaryti rekursinę procedūrą:

tai ragas :r
    apskritimas :r
    eisim priekin 4 kairėn 4 piešim
    tebus "r :r - 0,5
    jeigu :r < 0 [baik]
    ragas :r
taškas

Pastebėkime, kad šioje procedūroje yra rekursiją nutraukianti komanda (sąlyginis sakinys): jeigu :r < 0 [baik], t.y. baigiama piešti tada, kai spindulys tampa neteigiamas.
 

  1 pav. Kreipinys į rekursinę procedūrą: ragas 50

 Kitas pavyzdys, kuriame būtų vartojama rekursinė procedūra, yra medžio braižymas. Medžiu galim laikyti V formos figūra, kurios kiekvienos atkarpos (šakos) gale vėl yra V formos figūra. Parametru ataugos nusakysime ilgiausios šakos ataugų skaičių, analogiškai ilgiu – vienos ataugos ilgį, kampu – kampą tarp dviejų šakų:

tai medis :ilgis :kampas :ataugos
   jeigu : ataugos = 0 [baik]
   kairėn :kampas
   pasirink.pieštuko.spalvą bet.koks 15
   priekin 2 * :ilgis
   medis :ilgis :kampas ( : ataugos - 1 )
   atgal 2 * :ilgis
   dešinėn 2 * :kampas
   priekin :ilgis
   medis :ilgis :kampas ( : ataugos - 1 )
   atgal :ilgis kairėn :kampas
taškas
 

 2 pav. Šis medis nupieštas kreipiantis į procedūrą: medis 10 20 6

Norėdami išsiaiškinti rekursinės procedūros veikimą, pabandykite keisti argumentus nuo mažiausio (vis didindami) ir stebėdami Vėžliuko atliekamus veiksmus. Matote, net ir sudėtingų piešinių rekursinės procedūros nėra labai painios.

Pažintis su kaukių redaktoriumi

Vėžliukas gali keisti savo išvaizdą, būtent užsidėti kaukę. Mokame kaukę pasiimti iš kaukių lango. O kaip kaukės kuriamos, taisomos?
Kaukėms piešti Komenskio Logo sistema turi grafinį redaktorių, kuris dar vadinamas kaukių redaktoriumi arba Pieštuve. Jį galima išsikviesti keliais būdais. Vienas iš jų – paprasčiausiai atskirai įvykdant Komenskio Logo sistemos comiedit.exe bylą. Kitas būdas patogesnis – kaukių redaktorius iškviečiamas tiesiog iš sistemos, naudojantis Vėžliuko vizitine kortele. Reikia tik dukart spragtelti ties paveikslėliu, esančiu vizitinėje kortelėje.


 3 pav.

Redaktorius turi visas standartines grafinio redaktoriaus funkcijas:

  • piešia tieses, spalvotus ir nespalvotus stačiakampius, elipses;
  • spalvina;
  • įterpia bet kurio šrifto, dydžio, spalvos ar stiliaus tekstą;
  • pasuka piešinį bet kuriuo kampu, jį didina bei mažina;
  • kopijuoja arba padeda piešinį ar jo dalį į krepšį (Clipbaord) bei paima iš jo;
Redaktoriuje dar yra daug komandų darbui su kadrais (kaukės atskiras paveikslėlis), o taip pat įdomi fotografavimo galimybė: galima iškirpti dalį ekrano vaizdo ir panaudoti kaip kadrą.

Išmėginkime fotografavimo galimybę – į kadrą įkelkime už redaktoriaus esančio piešinio dalį. Pasirinkime mygtuką, vaizduojantį fotoaparatą – spustelėjus jį redaktorius užsivers, o pelės žymeklis įgaus kampelio pavidalą. Su šiuo kampeliu pažymėkime norimą grafikos dalį – atleidę pelės klavišą grįšime į redaktorių. Pažymėtoji piešinio dalis bus kadro kairiajame viršutiniame kampe – liks tik padėti ją į norimą vietą.

Darbui su kadrais skirta viršutinė parankinės juosta (redaktoriaus dešinėje). Čia yra mygtukai, leidžiantys vaikščioti iš vieno kadro į kitą, sužinoti kaukės kadrų skaičių bei kuriame kadre esame. Kadrus galima šalinti, įterpti naujus, peržiūrėti visą kadrų juostą. Kaip atrodys judesys, kai keičiamas vienas kadras po kito, galima pažiūrėti kadrų animacijos lange (4 pav.):
 

4 pav.

Kadrų animacijos lange galima ne tik stebėti kadrų kaitą, bet ir reguliuoti jų kaitos spartą, keisti kadrus lėtai po vieną (žingsniuoti) ir t.t. Čia lengvai pastebimi kadre esantys netikslumai, judesio trūkčiojimas. Nesunku nustatyti, kuris kadras taisytinas – užvėrus kadrų animacijos langą ties tuo kadru, jis automatiškai atsivers kaukių redaktoriuje. Peržiūros lango foną pakeisime dukart spragtelėję ties juo.

Išsamiau apie Vėžliuko kaukes

Kaukės dydį galima keisti: nuo 1x1 iki 255x255 taškų (kaukės tašką nusako redaktoriaus piešimo lango langelis). Kadro dydis keičiamas būsenos eilutės antrame langelyje dukart spragtelėjus pelės kairiuoju mygtuku ir nurodžius atitinkamus skaičius. Tačiau taip pakeisime tik kadro dydį, pats piešinys jame nepasikeis. Jeigu norime pakeisti drauge ir kadrą, ir jame esantį piešinį, tai pasirenkame parankinės mygtuką Keičia dydį arba atitinkamą meniu punktą. Kadangi kaukę sudaro taškai, tai kiekvieno jo vietą galima aprašyti koordinatėmis. Kairysis viršutinis taškas laikomas [1 1].

Jeigu didelėje kaukėje nupiešiame mažą piešinį, kaukę galima sumažinti iki piešinio dydžio – parankinės mygtukas Apčiuopia sritį\piešinį arba atitinkama meniu komanda (Apčiuopti). Kad galima būtų įvykdyti šią komandą kaukės pakraščiai turi būti skaidrios spalvos – ja nuspalvinta kaukės dalis Vėžliuko lauke bus nematoma. Papildomas spalvas galima sukurti spragtelėjus spalvų paletėje ties tuščia spalva kairiuoju pelės klavišu laikant nuspaudus Ctrl klavišą.

Kiekvienoje kaukėje yra taškas, vadinamas židiniu. Tai jautrus taškas, kuriuo Vėžliukas vaikščiodamas piešia, lyti foną, jis nurodo Vėžliuko padėtį Vėžliuko lauke. Židinio vietą kaukėje ir kiekviename kadre atskirai galima keisti. Jį galima nurodyti užrašius jo koordinates – dukart spragtelėjus būsenų eilutės paskutiniame (dešiniausiame) langelyje arba pasirinkus meniu komandą Židinys bei pele: meniu komandą Židinio nustatymas pele. Židinys nebūtinai turi būti kadro srityje, jis gali būti ir už kadro, t.y. galima nurodyti ir neigiamas koordinates, ir didesnes už kaukės dydį.

Komenskio Logo grafikos redaktoriuje nupieštą piešinį galima įsiminti įvairiai: kauke (.lgw tipo byla), .bmp bei .ico tipo bylomis (piktogramos).

Darbą kaukių redaktoriaus lange užbaigiame nuspaudę viršuje dešiniausią mygtuką (balta rodyklė mėlyname fone) – grįžtame į Vėžliuko lauką.

Pratimai

Pamėginkite parašyti rekursines šioms figūroms piešti. Atkreipiame dėmesį, kad viena procedūra gali tikti kelioms – skirtis tik kreipinių parametrais:



Paruošta pagal J. Aušraitės ir V. Dagienės pamokų ciklą Mokomės dirbti su Komenskio Logo.

Logo – kas tai? LogoWriter programa Naudingos nuorodos Metodinė medžiaga Moksleivių darbai
į svetainės pradžią
Laiškus su klausimais ir komentarais siųskite adresu: juraa@delfi.lt
Atnaujinta 2000 m. spalio 20 d.