Zbierka - Rekurzívne kocky: Rozdiel medzi revíziami

Zo stránky Parametrické a Generatívne 3D modelovanie
Bez shrnutí editace
Bez shrnutí editace
 
(23 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
<h1>'''Rekurzívne kocky'''</h1>
<div class="worksheet">
[[File:Recursive_cubes.png|alt=Rekurzívne kocky|top|left|256px]]
    [[File:Recursive_cubes.stl|360x360px|left|norotate=1]]
V tejto aktivite sa naučíte ako funguje rekurzia a pomocou nej si vytvoriť špecifický objekt, ktorým si vizualizujete rekurziu. Uvedený model je založený ne rekurzii, ktorá vždy potrebuje zastaviť, takže treba prísť na to ako.
    <h1>Rekurzívne kocky</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>[https://kempelen.dai.fmph.uniba.sk/design/index.php/Transform%C3%A1cie transformácie], [https://kempelen.dai.fmph.uniba.sk/design/index.php/Cykly cykly], [https://kempelen.dai.fmph.uniba.sk/design/index.php/CSG_oper%C3%A1cie CSG operácie], [https://kempelen.dai.fmph.uniba.sk/design/index.php/Rekurzia rekurzia]</span></div>
        <div><div>Nástroje:</div><span>[https://www.blockscad3d.com/ BlocksCAD] alebo [https://openscad.org/ OpenSCAD]</span></div>
        <div><div>inštrukcie pre učiteľov:</div><span>[https://kempelen.dai.fmph.uniba.sk/design/index.php/In%C5%A1trukcie_-_Rekurz%C3%ADvne_kocky učitelia - rekurzívne kocky]</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äť). Vemi rýchlo by sme prišli na to prečo je to zlé:<br clear=all> [[File:recursion.jpg|alt=vtipný obrázok popisujúci rekurziu|400px]]
        </p>
    </div>


<h2>'''Potrebné materiály:'''</h2>
    <div class="section">
*počítač s prístupom na internet
        <h3>Odkazy na materiály</h3>
*softvér Blockscad alebo OpenSCAD
        <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>
*sčebné materiály (návody, videá, atď.)
        <ul>
            <li>[https://kempelen.dai.fmph.uniba.sk/design/index.php/Te%C3%B3ria Teória] - rozcestník stručnej teórie pre koncepty, ktoré potrebujeme</li>
            <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>


<h2>'''Inštrukcie:'''</h2>
    <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ť 3D model a predstaviť si opakovania, ktoré pri implementácii robíme.</li>
            <li>Vytvárame rekurziu, takže primárne si vytvoríme funkciu, ktorá bude opakovane volať samú seba, niečo podobné ako nám hovorí tento obrázok:<br>[[File:Recursion_simpsons.gif|alt=vtipný gif rekurzie|256px]]</li>
            <li>Implementujte do funkcie opakujúce sa štruktúry, ktoré ste si všimli na modeli.</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>


<h3>Skúmanie:</h3>
    <div class="section">
Pred začatím tvorby 3D modelu pomocou rekurzie si preštudujeme čo je rekurzia a ako sa používa v matematike a programovaní. Tiež preskúmame koncept tvorby daného modelu pomocou postupného rekurzívneho pridávania menších kociek.
        <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>


<h3>Brainstorming:</h3>
    <div class="section">
Spoločne diskutujeme o rôznych spôsoboch, ako rekurzívne zložiť kocky na seba. Sústreďujeme sa na identifikáciu optimálnych parametrov, ako aj na možné vylepšenia procesu.
        <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>


<h3>Návrh:</h3>
    <div class="section">
Navrhujeme algoritmus rekurzívnej funkcie na tvorbu akoby pyramídy z kociek. Plánujeme, ako rozdeliť tento proces do jednotlivých krokov a identifikujeme, aké kocky budeme potrebovať na začatie.
        <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>


<h3>Doladenie:</h3>
    <div class="section">
Testujeme rekurzívnu funkciu s rôznymi parametrami a počiatočnými podmienkami. Snažíme sa optimalizovať algoritmus na zlepšenie efektivity a presnosti.
        <h3>Záver</h3>
 
        <p>
<h3>Zdieľanie:</h3>
            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.
Zdieľame náš postup a algoritmus s ostatnými študentmi a diskutujeme o ich skúsenostiach a úspechoch. Spoločne hľadáme riešenia problémov a vylepšení.
        </p>
 
    </div>
<h3>Prezentovanie:</h3>
</div>
Predstavujeme hotový 3D model vytvorený z kociek pomocou rekurzívneho procesu. Vysvetlíme náš algoritmus a jeho fungovanie prostredníctvom prezentácie alebo demonštrácie. Poskytneme priestor na otázky a diskusiu.
 
<h3>Zdroje modelov:</h3>  
[https://www.blockscad3d.com/community/projects/1756459 BlocksCAD]<br>
[https://github.com/Achinys-out/ParametricAndGenerativeDesign/blob/main/OpenSCAD/recursive_cubes.scad OpenSCAD]<br>

Aktuálna revízia z 04:35, 9. máj 2024

   https://kempelen.dai.fmph.uniba.sk/design/images/e/eb/Recursive_cubes.stl 

Rekurzívne kocky

Trvanie:
1 hod
Náročnosť:
pokročilý
Nástroje:
BlocksCAD alebo OpenSCAD
inštrukcie pre učiteľov:
učitelia - 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äť). Vemi rýchlo by sme prišli na to prečo je to zlé:
vtipný obrázok popisujúci rekurziu

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:

  • Teória - rozcestník stručnej teórie pre koncepty, ktoré potrebujeme
  • 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

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ť 3D model a predstaviť si opakovania, ktoré pri implementácii robíme.
  3. Vytvárame rekurziu, takže primárne si vytvoríme funkciu, ktorá bude opakovane volať samú seba, niečo podobné ako nám hovorí tento obrázok:
    vtipný gif rekurzie
  4. Implementujte do funkcie opakujúce sa štruktúry, ktoré ste si všimli na modeli.
  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.

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.