Zbierka - Rekurzívne guličky: Rozdiel medzi revíziami
Bez shrnutí editace |
Bez shrnutí editace |
||
(4 medziľahlé úpravy od rovnakého používateľa nie sú zobrazené.) | |||
Riadok 6: | Riadok 6: | ||
<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, CSG operá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 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> | <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> | ||
Riadok 17: | Riadok 18: | ||
Ú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. | Ú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 23: | 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>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>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>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> | ||
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> | ||
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.