Zbierka - Rekurzívne guličky: Rozdiel medzi revíziami
Bez shrnutí editace |
Bez shrnutí editace |
||
(10 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: | [[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, | <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> | <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 | <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> | </div> | ||
<br clear=all> | <br clear=all> | ||
Riadok 50: | Riadok 16: | ||
<h3>Zadanie úlohy</h3> | <h3>Zadanie úlohy</h3> | ||
<p> | <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> | </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ť | <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 | <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> | <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> | <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 | <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> | <li>zmeniť parameter $fn pre porovnanie zložitosti výpočtov pri renderovaní</li> | ||
<li> | <li>zmeniť parametre, ktoré určujú rozmiestnenie ďalších objektov, prípadne pridánie ďalších pozícií</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> | ||
Riadok 100: | Riadok 67: | ||
<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> | <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> | <ul> | ||
<li>[https://www.blockscad3d.com/community/projects/ | <li>[https://www.blockscad3d.com/community/projects/1765847 BlocksCAD]</li> | ||
<li>[https://github.com/Achinys-out/ParametricAndGenerativeDesign/blob/main/OpenSCAD/ | <li>[https://github.com/Achinys-out/ParametricAndGenerativeDesign/blob/main/OpenSCAD/recursive_spheres.scad OpenSCAD]</li> | ||
</ul> | </ul> | ||
</div> | </div> | ||
Riadok 108: | Riadok 75: | ||
<h3>Záver</h3> | <h3>Záver</h3> | ||
<p> | <p> | ||
V tejto úlohe sme implementovali | 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
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:
- 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
- Rozlíšenie kruhu
Inštrukcie
- 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ý.
- Skúste analyzovať 3D model a predstaviť si opakovania, ktoré pri implementácii robíme.
- Vytvárame rekurziu, takže primárne si vytvoríme funkciu, ktorú budeme opakovane volať.
- 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ť.
- 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.
- 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).
- 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.