Zbierka - Rekurzívne guličky: Rozdiel medzi revíziami
Bez shrnutí editace |
Bez shrnutí editace |
||
Riadok 1: | Riadok 1: | ||
<div class="worksheet"> | <div class="worksheet"> | ||
[[File:Recursive_sphere.png|alt=Rekurzívne gule | [[File:Recursive_sphere.png|alt=Rekurzívne gule|left|256px]] <h1>Rekurzívne guličky</h1> | ||
<div class="section"> | <div class="section"> | ||
<div class="lesson-plan-text"> | <div class="lesson-plan-text"> | ||
Riadok 44: | Riadok 8: | ||
<div><div>Nástroj:</div><span>[https://www.blockscad3d.com/ BlocksCAD] alebo [https://openscad.org/ OpenSCAD]</span></div> | <div><div>Nástroj:</div><span>[https://www.blockscad3d.com/ BlocksCAD] alebo [https://openscad.org/ OpenSCAD]</span></div> | ||
</div> | </div> | ||
<p>V predošlom | <p>V predošlom príklade sme si vytvorili rekurzívne kocky 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 14: | ||
<h3>Zadanie úlohy</h3> | <h3>Zadanie úlohy</h3> | ||
<p> | <p> | ||
Úlohou je rekurzívne vytvoriť objekt zostavený z gúľ, ktoré sa každú iteráciu rozmiestňujú na viaceré smery základného objektu. | |||
</p> | </p> | ||
</div> | </div> | ||
Riadok 60: | Riadok 24: | ||
<li>Skúste analyzovať obrázok a predstaviť si opakovania, ktoré pri implementácii robíme.</li> | <li>Skúste analyzovať obrázok 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 obrázku - 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 35: | ||
<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 93: | Riadok 56: | ||
<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://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://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> | </ul> | ||
</div> | </div> | ||
Riadok 108: | Riadok 72: | ||
<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> |
Verzia z 23:25, 25. apríl 2024
Rekurzívne guličky
V predošlom príklade sme si vytvorili rekurzívne kocky 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ť objekt zostavený z gúľ, ktoré sa každú iteráciu rozmiestňujú na viaceré smery základného objektu.
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ť obrázok 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 obrázku - 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.
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:
- 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
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.