Zbierka - Rekurzívne guličky: Rozdiel medzi revíziami

Zo stránky Parametrické a Generatívne 3D modelovanie
(Vytvorená stránka „alt=Rekurzívne gule|top|left|256px <br clear=all> <h2>'''Potrebné materiály:'''</h2> *počítač s prístupom na internet *softvér Blockscad alebo OpenSCAD *učebné materiály (návody, videá, atď.) <h2>'''Inštrukcie:'''</h2> <h3>Skúmanie:</h3> Pred začatím tvorby 3D modelu rekurzívnych gúľ sa dozvieme viac o rekurzii a jej použití v matematike a programovaní. Skúmame rôzne prístupy k rekurzii a pochopenie toho…“)
 
Bez shrnutí editace
Riadok 1: Riadok 1:
[[File:Recursive_sphere.png|alt=Rekurzívne gule|top|left|256px]]
<br clear=all>
<h2>'''Potrebné materiály:'''</h2>
<h2>'''Potrebné materiály:'''</h2>
*počítač s prístupom na internet
*počítač s prístupom na internet
Riadok 35: Riadok 30:
<h2>'''Vysvetlenie:'''</h2>
<h2>'''Vysvetlenie:'''</h2>
Na tomto modeli sme si opäť ukázali rekurziu a to ako funguje, že sa dá zapisovať rôznymi spôsobmi a podmienkami. Taktiež sme si vizualizovali ako zmena parametrov dokáže ovplyvniť celý objekt. Rekurzia je bližšie vysvetlená v modeli [https://kempelen.dai.fmph.uniba.sk/design/index.php/Zbierka_-_Rekurz%C3%ADvne_kocky Rekurzívne kocky].
Na tomto modeli sme si opäť ukázali rekurziu a to ako funguje, že sa dá zapisovať rôznymi spôsobmi a podmienkami. Taktiež sme si vizualizovali ako zmena parametrov dokáže ovplyvniť celý objekt. Rekurzia je bližšie vysvetlená v modeli [https://kempelen.dai.fmph.uniba.sk/design/index.php/Zbierka_-_Rekurz%C3%ADvne_kocky Rekurzívne kocky].
<div class="worksheet">
    [[File:Recursive_sphere.png|alt=Rekurzívne gule|top|left|256px]] <h1>Rekurzívne guličky</h1>
    <div class="section">
<div class="lesson-plan-text">
        <div><div>Trvanie:</div><span>1 hod</span></div>
        <div><div>Náročnosť:</div><span>pokročilý</span></div>
        <div><div>Zručnosti:</div><span>transformácie, množinové operácie, podmienky, rekurzia</span></div>
        <div><div>Nástroj:</div><span>[https://www.blockscad3d.com/ BlocksCAD] alebo [https://openscad.org/ OpenSCAD]</span></div>
    </div>
        <p>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.</p>
    </div>
<br clear=all>
    <div class="section">
        <h3>Zadanie úlohy</h3>
        <p>
            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é.
        </p>
    </div>
    <div class="section">
        <h3>Inštrukcie</h3>
        <ol>
            <li>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ý.</li>
            <li>Skúste analyzovať obrázok a predstaviť si opakovania, ktoré pri implementácii robíme.</li>
            <li>Vytvárame rekurziu, takže primárne si vytvoríme funkciu, ktorú budeme opakovane volať.</li>
            <li>Implementujte do funkcie opakujúce sa štruktúry, ktoré ste si všimli na obrázku.</li>
            <li>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.</li>
            <li>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.</li>
            <li>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."</li>
        </ol>
    </div>
    <div class="section">
        <h3>Testovanie a úpravy</h3>
        <p>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:</p>
        <ul>
            <li>vyskúšať iné transofrmácie pri volaní funkcie</li>
            <li>namiesto jednoduchých základných objektov použiť komplexnejšie modely</li>
            <li>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</li>
        </ul>
    </div>
    <div class="section">
        <h3>Spätná väzba</h3>
        <p>
            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.
        </p>
    </div>
    <div class="section">
        <h3>Odkazy na materiály</h3>
        <p>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:</p>
        <ul>
            <li>[https://www.blockscad3d.com/edu/lessons/ 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</li>
            </li>
            <li>[https://en.wikibooks.org/wiki/OpenSCAD_User_Manual 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</li>
            <li>[https://sk.wikipedia.org/wiki/Rekurzia_(matematika) Rekurzia - Wikipedia]</li>
        </ul>
    </div>
    <div class="section">
        <h3>Vzorové riešenie</h3>
        <p>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ť:</p>
        <ul>
            <li>[https://www.blockscad3d.com/community/projects/1756459 BlocksCAD]</li>
            <li>[https://github.com/Achinys-out/ParametricAndGenerativeDesign/blob/main/OpenSCAD/recursive_cubes.scad OpenSCAD]</li>
        </ul>
    </div>
    <div class="section">
        <h3>Záver</h3>
        <p>
            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.
        </p>
    </div>
</div>

Verzia z 23:03, 25. apríl 2024

Potrebné materiály:

  • počítač s prístupom na internet
  • softvér Blockscad alebo OpenSCAD
  • učebné materiály (návody, videá, atď.)

Inštrukcie:

Skúmanie:

Pred začatím tvorby 3D modelu rekurzívnych gúľ sa dozvieme viac o rekurzii a jej použití v matematike a programovaní. Skúmame rôzne prístupy k rekurzii a pochopenie toho, ako môžeme vytvoriť gule rekurzívne pomocou zmeny podmienok a parametrov.

Brainstorming:

Spoločne diskutujeme o rôznych podmienkach, ktoré môžeme použiť na definovanie rekurzívnej funkcie na tvorbu modelu. Premýšľame o tom, ako tieto podmienky ovplyvnia výsledný tvar a štruktúru. Rozmyslíme si ako zapísať funkciu aby sme získali podobný objekt.

Návrh:

Navrhujeme algoritmus, ktorý bude vytvárať rekurzívne gule s použitím iných podmienok a parametrov. Plánujeme, ako budeme meniť tieto podmienky a parametre, aby sme dosiahli požadovaný tvar a štruktúru modelu.

Doladenie:

Testujeme algoritmus s rôznymi kombináciami podmienok a parametrov. Snažíme sa optimalizovať algoritmus tak, aby sme dosiahli želaný vzhľad rekurzívnych gúľ a zároveň minimalizovali zložitosť procesu a zjednodušiť zložitosť pre exportvanie objektu.

Zdieľanie:

Zdieľame náš postup a algoritmus s ostatnými študentmi a diskutujeme o ich skúsenostiach a úspechoch pri tvorbe rekurzívnych gúľ. Spoločne hľadáme riešenia problémov a vylepšení.

Prezentovanie:

Prezentujeme hotový 3D model rekurzívnych gúľ vytvorený pomocou zmenených podmienok a parametrov. Vysvetľujeme náš algoritmus a jeho fungovanie prostredníctvom prezentácie alebo demonštrácie. Poskytneme priestor na otázky a diskusiu.

Zdroje modelov:

BlocksCAD
OpenSCAD

Vysvetlenie:

Na tomto modeli sme si opäť ukázali rekurziu a to ako funguje, že sa dá zapisovať rôznymi spôsobmi a podmienkami. Taktiež sme si vizualizovali ako zmena parametrov dokáže ovplyvniť celý objekt. Rekurzia je bližšie vysvetlená v modeli Rekurzívne kocky.



Rekurzívne gule

Rekurzívne guličky

Trvanie:
1 hod
Náročnosť:
pokročilý
Zručnosti:
transformácie, množinové operácie, podmienky, rekurzia
Nástroj:
BlocksCAD alebo OpenSCAD

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

  1. 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ý.
  2. Skúste analyzovať obrázok a predstaviť si opakovania, ktoré pri implementácii robíme.
  3. Vytvárame rekurziu, takže primárne si vytvoríme funkciu, ktorú budeme opakovane volať.
  4. Implementujte do funkcie opakujúce sa štruktúry, ktoré ste si všimli na obrázku.
  5. 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.
  6. 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.
  7. 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:

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.