fraktály

Príklad 4

Napíšte rekurzívnu procedúry, pomocou ktorých sa vykreslí "Cantorovu množinu" podľa predlohy na obrázku, do zvoleného stupňa.

Cantorova množina

Riešenie:

  1. Obrázok si môžme rozdeliť na dve nezávisle časti. Prvá časť je čiara a druhá časť je neviditeľná čiara. Teda budeme mať dve procedúry cantorA a cantorB, obe procedúry budú mať rovnaké parametre a to dĺžka úsečky a stupeň.

    viem cantorA :d :n   viem cantorB :d :n
    koniec   koniec


  2. Procedúra cantorA bude kresliť viditeľnú čiaru a procedúra cantroB neviditeľnú, teda:

    viem cantorA :d :n   viem cantorB :d :n
      do :d     ph do :d pd
    koniec   koniec


  3. Vo vyššom stupni sa bude úsečka deliť na tri rovnako dĺhé časti a to tak, že prostredná časť bude vynechaná (neviditeľná). Vieme, že jednotlivé úsečky sa budú vykresľovať pri stupni 0, takže môžme doplniť príkazy do procedúry cantorA

    viem cantorA :d :n   viem cantorB :d :n
      ak :n=0 [do :d ukonci]     ak :n=0 [ph do :d pd ukonci]
      cantorA :d/3 :n-1   koniec
      cantorB :d/3 :n-1    
      cantorA :d/3 :n-1  
    koniec  


  4. Ešte nám ostáva vyriešiť, čo s druhou procedúrou. Pri vykonaní tejto procedúry nemá nič nakresliť, len sa má presunúť korytnačka. Úsečka sa síce má deliť na tri časťi, ale nekreslená čiara sa nemusí, pretože je jedno či nakreslíme tretiny pri sebe alebo jednu celú. Takže v procedúre bude volanie tejt istej procedúry s rovnakým parametrm, ale so zníženým stupňom

    viem cantorA :d :n   viem cantorB :d :n
      ak :n=0 [do :d ukonci]     ak :n=0 [ph do :d pd ukonci]
      cantorA :d/3 :n-1     cantorB :d :n-1
      cantorB :d/3 :n-1   koniec
      cantorA :d/3 :n-1    
    koniec  

Procedúru na vykreslenie Cantorovej množiny zavoláme pomocou príkazu cantorA 500 3