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

Zo stránky Parametrické a Generatívne 3D modelovanie
Bez shrnutí editace
Bez shrnutí editace
 
(15 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
<div class="worksheet">
<div class="worksheet">
     [[File:Recursive_cubes.png|alt=Rekurzívne kocky|top|left|320px]] <h1>Rekurzívne kocky</h1>
     [[File:Recursive_cubes.stl|360x360px|left|norotate=1]]  
    <h1>Rekurzívne kocky</h1>
     <div class="section">
     <div class="section">
<div class="lesson-plan-text">
<div class="lesson-plan-text">
         <div><div>Trvanie:</div><span>1 hod</span></div>
         <div><div>Trvanie:</div><span>1 hod</span></div>
         <div><div>Náročnosť:</div><span>pokročilý</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, rekurzia</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ástroj:</div><span>[https://www.blockscad3d.com/ BlocksCAD] alebo [https://openscad.org/ OpenSCAD]</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>
     </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>
         <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>
Riadok 14: Riadok 16:
         <h3>Zadanie úlohy</h3>
         <h3>Zadanie úlohy</h3>
         <p>
         <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é.
             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>
         </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://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>
     </div>


Riadok 22: Riadok 37:
         <ol>
         <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>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>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ú budeme opakovane volať.</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 obrázku.</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>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>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>
Riadok 46: Riadok 61:
             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.
             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>
         </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>



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.