fraktály

Príklad 1

Napíšte rekurzívnu procedúru, ktorá nakresli binárny strom podľa predlohy na obrázku, do zvoleného stupňa. Vetvy stromu sa skracujú na polovicu vo vyšších úrovniach. Ako parameter sa zadá dĺžka najdlhšej strany a stupeň vykreslenia.

binárny strom

Riešenie:

  1. Máme nakresliť binárny strom. Analýzou obrázka vieme, že iniciátor je úsečka a tá sa zmení na konci na rozdvojenú úsečku. Takže generátorom krivky je úsečka na konci rozdvojená. Koncové dve časti majú iba polovičnú dĺžku oproti predchádzajúcej. Z obrázka je vidieť, že ak kreslíme ľavú časť stromu tak sa musíme vracať do nižších úrovní aby sme mohli vykresľovať pravú časť stromu. Takže po dokreslení sa musíme vrátiť na miesto z ktorého sme vychádzali.

    generátor vykreslíme pomocou príkazov:

    do :a
    vl 60
    do :a/2
    vz :a/2
    vp 120
    do :a/2
    vz :a/2
    vl 60
    vz :a

  2. Pomocou týchto príkazov sa nám vykreslí generátor, ale čo s iniciátorom? Iniciátor sa vykreslí hneď prvým príkazom. Takže je potrebné, aby sa pri prvom volaní vykreslila len úsečka a ak bude stupeň väčší ako 0, tak sa vykreslia ostatné časti stromu v rekurzívnom volaní. Naša procedúra bude mať dva parametre, jeden bude predstavovať dĺžku najdlhšej strany a druhý stupeň stromu.

    viem strom :a :stupen
      ak :stupen>=0
      [ do :a
        vl 60
        "nejaké rekurzívne volanie"
        vp 120
        "nejaké rekurzívne volanie"
        vl 60
        vz :a
      ]
    koniec

  3. Ideme sa pozrieť, čo zatiaľ robí procedúra. Ak je stupeň 0, tak sa nakreslí len čiara, otočí sa doľava, doprava, doľava a vráti sa na miesto z ktorého sme začínali.

    Ak bude stupeň 1 potrebujeme, aby sa nakreslila čiara (tá sa nakreslí, lebo je to prvý príkaz v procedúre), potom sa otočíme a v rekurzívnom volaní potrebujeme, aby sa nám nakreslila len jedna čiara. Toto musíme zabezpečiť vhodnou zmenou parametrov. Ak parameter stupeň prejde cez podmienku, tak sa nakreslí čiara. V nasledujúcom rekurzívnom volaní by sa nič nemalo vykonať.

    Pri vynorení sa otočíme do prava a zase by sa v rekurzívnom volaní mala nakresliť len jedna čiara. A nakoniec sa vynoríme a vrátime na začiatok.

    Vieme, že porovnávame hodnotu stupňa a tá predstavuje počet vnorení. Parametre sa budú upravovať takto:

    a--> a/2
    stupen -->stupen-1

    Upravená procedúra bude vyzerať takto:

    viem strom :a :stupen
      ak :stupen>=0
      [ do :a
        vl 60
        strom :a/2 :stupen-1
        vp 120
        strom :a/2 :stupen-1
        vl 60
        vz :a
      ]
    koniec

Procedúru na vykreslenie binárneho stromu môžme zavolať takto: strom 100 3

Ak nie je vidieť Imagine projekt, treba stiahnuť Imagine plugin