Zbierka - Rekurzívne kocky
Rekurzívne kocky
V predošlom zadaní na tvorbu fraktálu sme si povedali, že opakovanie vieme implementovať pomocou cyklov ale aj pomocou rekurzie. Rekurzia je dôležitý koncept, ktorý sa využíva pri tvorbe generatívneho dizajnu, ale aj v programovaní všeobecne na riešenie komplexných problémov. Generatívny dizajn sa zaoberá vytváraním štruktúr, vzorov alebo formou na základe algoritmov, pravidiel alebo procesov, ktoré vedú k vytváraniu komplexných a organických výsledkov. Fraktály sú práve takými príkladmi - sú vytvorené opakovaním jednoduchých pravidiel alebo vzorcov, ktoré vedú k tvorbe zložitých a detailných obrazcov s hierarchickou štruktúrou. Takýto fraktál sa teraz pokúsime pomocou rekurzie vytvoriť. Pamätajte však, že rekurzia býva spravidla veľmi náročná na výpočty.
Zadanie úlohy
V predošlom modeli sme sa pokúsili implementovať fraktál iteratívne, teraz si ukážeme ako to ide jednoduchšie pomocou rekurzie na podobnom objekte. Rekurzia v stručnosti zanemaná, že funkcia volá samú seba, no pri rekurzii si musíme dávať pozor na podmienku zastavenia programu. Ak by sme túto podmienku neimplementovali, program by sa volal stále dokola a nikdy by neskončil (alebo napríklad kým by nedošla programu pamäť). Velmi rýchlo by sme prišli na to prečo je to zlé.
Inštrukcie
- Otvorte si daný nástroj - BlocksCAD alebo OpenSCAD, ktorý ste si na implementáciu vybrali. Tinkercad Codeblocks nám neumožňuje implementovať rekurziu, preto vo výbere nie je zahrnutý.
- Skúste analyzovať obrázok a predstaviť si opakovania, ktoré pri implementácii robíme.
- Vytvárame rekurziu, takže primárne si vytvoríme funkciu, ktorú budeme opakovane volať.
- Implementujte do funkcie opakujúce sa štruktúry, ktoré ste si všimli na obrázku.
- Predtým ako spustíte vašu prvú rekurziu, je potrebné nastaviť parametre tak, aby sa funkcia nespustila priveľa krát, to už totiž môže byť pre renderovanie extrémne náročné a nemusí to zvládnuť. Preto si pred prvým spustením renderovania radšej prejdite vaše riešenie a skontrolujte výpočtami koľko krát sa daná funkcia zavolá. Ideálny počet na začiatok je zhruba 3.
- Pri implementácii si však dajte pozor na spúšťanie renderovania ak nemáte implementovanú podmienku na zastavenia, alebo ju máte nesprávne a funkciou voláte samú seba. V takom prípade môžete o program prísť. Ak sa vám program ri renderovaní zacyklí (zasekne), skúste ho zatvoriť, opäť spustiť a následne prerobiť implementáciu. Pre to je dôležité priebežne si držať niekde aktuálnu kópiu vašej implementácie.
- Do funkcie implementujte volanie samej seba a nezabudnite zmeniť parametre, ktoré jej posúvate, jeden z nich musí byť parameter, ktorým budeme kontrolovať či má funkcia zastaviť alebo nie. Pri každom volaní funkcie skontroluejme, či tento parameter nenadobudol takú hodnotu, pri ktorej chceme zastaviť, napríklad: ak je šírka objektu menšia ako 1, tak chceme skončiť, alebo aj: "Pokračujme vo volaní funkcie kým je šírka objektu väčšia alebo rovná 1."
Testovanie a úpravy
Prezrite a skontrolujte si objekt a odpovedzte si na to či daný 3D model zodpovedá zadaniu a či ste s ním spokojní. Ak chcete skúsiť model upraviť, navrhujeme:
- vyskúšať iné transofrmácie pri volaní funkcie
- namiesto jednoduchých základných objektov použiť komplexnejšie modely
- vo vzorovom riešení si môžete všimnúť kolko krát a kam sa kocka pri jednom volaní funkcie umiestnuje, skúste zmeniť tieto miesta apočet kociek a sledujte ako bude vyzerať výsledok
Spätná väzba
Ak ste spokojní so svojím výsledným modelom, prezentujte ho ostatným, zhodnoťte koncepty, ktoré ste použili a ako ste ho implementovali, buďte otvorení k hodnoteniam od ostatných a k prípadným návrhom na zlepšenie.
Odkazy na materiály
V tejto sekcii nájdete odkazy na materiály, ktoré vám môžu pomôcť pri riešení daných problémov a naučia vás ako používať požívané nástroje:
- BlocksCAD lessons - lekcie pre tvorbu modelov - tu si môžete vyskúšat modelovanie v BlocksCADe na úlohách s rôznymi modelmi, kde si viete triediť výber úloh podľa toho čo potrebujete, alebo vás zaujíma
- OpenSCAD manuál - miesto kde nájdete všetky potrebné informácie k OpenSCADu vrátane všetkých príkazov, dokumentácie či syntaxe
- Rekurzia - Wikipedia
Vzorové riešenie
Ak budete potrebovať motiváciu alebo si skontrolovať váš výsledný model, v nasledujúcich odkazoch nájdete implementáciu daného modelu v nástrojoch, ktoré ste na implementáciu mohli použiť:
Záver
V tejto úlohe sme implementovali svoju prvú rekurziu a ukázali si, že to nie je zrovna najjednoduchšie, no je to koncept, ktorý je veľmi rozšírený a široko využívaný. S rekurziou sa stretneme aj pri ďalších modeloch pre lepšie precvičenie a navyknutie na tento prístup programovania.