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
 
(11 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
[[File:Recursive_sphere.png|alt=Rekurzívne gule|top|left|256px]]
<div class="worksheet">
 
    [[File:Recursive_spheres.stl|360x360px|left|norotate=0]]
 
    <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>[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_guli%C4%8Dky učitelia - rekurzívne guličky]</span></div>
    </div>
        <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 sú napríklad gule dbať na počet plôch v nich obsiahnutých.</p>
    </div>
<br clear=all>
<br clear=all>
    <div class="section">
        <h3>Zadanie úlohy</h3>
        <p>
            Ú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>
    </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>
*uč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>
<h2>'''Inštrukcie:'''</h2>
            <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>
<h3>Skúmanie:</h3>
            </li>
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.
            <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>
<h3>Brainstorming:</h3>
            <li>[https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Other_Language_Features#Circle_resolution:_$fa,_$fs,_and_$fn Rozlíšenie kruhu]</li>
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.
        </ul>
 
    </div>
<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>
    <div class="section">
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>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ú budeme opakovane volať.</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>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>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 skúste ju obozretne otestovať a upravovať.</li>
        </ol>
    </div>


<h3>Zdieľanie:</h3>
    <div class="section">
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>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>zmeniť parameter $fn pre porovnanie zložitosti výpočtov pri renderovaní</li>
            <li>zmeniť parametre, ktoré určujú rozmiestnenie ďalších objektov, prípadne pridánie ďalších pozícií</li>
        </ul>
    </div>


<h3>Prezentovanie:</h3>
    <div class="section">
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>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>Zdroje modelov:</h3>  
    <div class="section">
[https://www.blockscad3d.com/community/projects/1765847 BlocksCAD]<br>
        <h3>Vzorové riešenie</h3>
[https://github.com/Achinys-out/ParametricAndGenerativeDesign/blob/main/OpenSCAD/recursive_spheres.scad OpenSCAD]<br>
        <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/1765847 BlocksCAD]</li>
            <li>[https://github.com/Achinys-out/ParametricAndGenerativeDesign/blob/main/OpenSCAD/recursive_spheres.scad OpenSCAD]</li>
        </ul>
    </div>


<h2>'''Vysvetlenie:'''</h2>
    <div class="section">
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].
        <h3>Záver</h3>
        <p>
            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>
    </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.