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

Zo stránky Parametrické a Generatívne 3D modelovanie
Bez shrnutí editace
Bez shrnutí editace
 
(9 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
<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, ako môžeme vytvoriť gule rekurzívne pomocou zmeny podmienok a parametrov.
<h3>Brainstorming:</h3>
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.
<h3>Návrh:</h3>
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.
<h3>Doladenie:</h3>
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.
<h3>Zdieľanie:</h3>
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í.
<h3>Prezentovanie:</h3>
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.
<h3>Zdroje modelov:</h3>
[https://www.blockscad3d.com/community/projects/1765847 BlocksCAD]<br>
[https://github.com/Achinys-out/ParametricAndGenerativeDesign/blob/main/OpenSCAD/recursive_spheres.scad OpenSCAD]<br>
<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].
<div class="worksheet">
<div class="worksheet">
     [[File:Recursive_sphere.png|alt=Rekurzívne gule|top|left|256px]] <h1>Rekurzívne guličky</h1>
     [[File:Recursive_spheres.stl|360x360px|left|norotate=0]]  
    <h1>Rekurzívne guličky</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, podmienky, 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_guli%C4%8Dky učitelia - rekurzívne guličky]</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 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 príklade sme si vytvorili fraktál rekurzívnych kociek nejakým spôsobom. Touto úlohou si chceme prehĺbiť pochopenie rekurzie a ukázať iný spôsob, ktorý môžeme v rekurzii použiť, taktiež si ukážeme viac podmienok a prečo treba pri zložitejších objektoch akými napríklad gule dbať na počet plôch v nich obsiahnutých.</p>
     </div>
     </div>
<br clear=all>
<br clear=all>
Riadok 50: 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é.
             Úlohou je rekurzívne vytvoriť fraktál zostavený z gúľ, ktoré sa každú iteráciu rozmiestňujú na viaceré smery základného objektu.
         </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>
            <li>[https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Other_Language_Features#Circle_resolution:_$fa,_$fs,_and_$fn Rozlíšenie kruhu]</li>
        </ul>
     </div>
     </div>


Riadok 58: Riadok 38:
         <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ú budeme opakovane volať.</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 - dostatočne odpodmienkujte smery v ktorých budete Ďalšie objekty umiestnovať.</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>Z predošlej úlohy sme zistili na čo všetko si treba dávať pozor pri rekurzii - počet volaní, správne vytvorenú podmienku a premennú v tejto podmienke. Treba si na to dať pozor aj v tomto prípade.</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>Taktiež si treba dať pozor na počet plôch obsiahnutý v objektoch, ktoré sa pokúšame renderovať. Taká kocka má presne 6 plôch, čo je celkom málo, no taká guľa môže mať mnohonásobne viac - podľa toho akú hladkú ju chceme. No my ju nechceme hladkú keď ju využívame v rekurzii, pretože renderovanie takto zložitého objektu s mnohými plochami priveľa krát je príliš výpočtovo náročné. Preto si treba dobre pozrieť parameter <b>[https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Other_Language_Features#Circle_resolution:_$fa,_$fs,_and_$fn $fn]</b> a ako funguje (ako ho využijeme na zmenu počtu plôch v objekte).</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>
             <li>Do funkcie implementujte volanie samej seba a skúste ju obozretne otestovať a upravovať.</li>
         </ol>
         </ol>
     </div>
     </div>
Riadok 71: Riadok 51:
         <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>
         <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>
         <ul>
             <li>vyskúšať iné transofrmácie pri volaní funkcie</li>
             <li>zmeniť parameter $fn pre porovnanie zložitosti výpočtov pri renderovaní</li>
             <li>namiesto jednoduchých základných objektov použiť komplexnejšie modely</li>
             <li>zmeniť parametre, ktoré určujú rozmiestnenie ďalších objektov, prípadne pridánie ďalších pozícií</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>
         </ul>
     </div>
     </div>
Riadok 82: 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>


Riadok 108: Riadok 75:
         <h3>Záver</h3>
         <h3>Záver</h3>
         <p>
         <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.
             V tejto úlohe sme implementovali ďalšiu rekurziu iným spôsobom a mohli sme v nej viac pozorovať ako moc je dôležité venovať pozornosť zložitosti objektov.
         </p>
         </p>
     </div>
     </div>
</div>
</div>

Aktuálna revízia z 05:07, 9. máj 2024

   https://kempelen.dai.fmph.uniba.sk/design/images/a/a6/Recursive_spheres.stl 

Rekurzívne guličky

Trvanie:
1 hod
Náročnosť:
pokročilý
Nástroje:
BlocksCAD alebo OpenSCAD
Inštrukcie pre učiteľov:
učitelia - rekurzívne guličky

V predošlom príklade sme si vytvorili fraktál rekurzívnych kociek nejakým spôsobom. Touto úlohou si chceme prehĺbiť pochopenie rekurzie a ukázať iný spôsob, ktorý môžeme v rekurzii použiť, taktiež si ukážeme viac podmienok a prečo treba pri zložitejších objektoch akými sú napríklad gule dbať na počet plôch v nich obsiahnutých.


Zadanie úlohy

Úlohou je rekurzívne vytvoriť fraktál zostavený z gúľ, ktoré sa každú iteráciu rozmiestňujú na viaceré smery základného objektu.

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:

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ú budeme opakovane volať.
  4. Implementujte do funkcie opakujúce sa štruktúry, ktoré ste si všimli na modeli - dostatočne odpodmienkujte smery v ktorých budete Ďalšie objekty umiestnovať.
  5. Z predošlej úlohy sme zistili na čo všetko si treba dávať pozor pri rekurzii - počet volaní, správne vytvorenú podmienku a premennú v tejto podmienke. Treba si na to dať pozor aj v tomto prípade.
  6. Taktiež si treba dať pozor na počet plôch obsiahnutý v objektoch, ktoré sa pokúšame renderovať. Taká kocka má presne 6 plôch, čo je celkom málo, no taká guľa môže mať mnohonásobne viac - podľa toho akú hladkú ju chceme. No my ju nechceme hladkú keď ju využívame v rekurzii, pretože renderovanie takto zložitého objektu s mnohými plochami priveľa krát je príliš výpočtovo náročné. Preto si treba dobre pozrieť parameter $fn a ako funguje (ako ho využijeme na zmenu počtu plôch v objekte).
  7. Do funkcie implementujte volanie samej seba a skúste ju obozretne otestovať a upravovať.

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:

  • zmeniť parameter $fn pre porovnanie zložitosti výpočtov pri renderovaní
  • zmeniť parametre, ktoré určujú rozmiestnenie ďalších objektov, prípadne pridánie ďalších pozícií

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 ďalšiu rekurziu iným spôsobom a mohli sme v nej viac pozorovať ako moc je dôležité venovať pozornosť zložitosti objektov.