Zbierka - L-systém: Rozdiel medzi revíziami

Zo stránky Parametrické a Generatívne 3D modelovanie
Bez shrnutí editace
Bez shrnutí editace
 
(10 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 7: Riadok 7:
         <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>[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/Podmienky podmienky], [https://kempelen.dai.fmph.uniba.sk/design/index.php/Funkcie funkcie], [https://kempelen.dai.fmph.uniba.sk/design/index.php/Rekurzia 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/Podmienky podmienky], [https://kempelen.dai.fmph.uniba.sk/design/index.php/Funkcie funkcie], [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_-_L-syst%C3%A9m L-systém]</span></div>
         <div><div>Inštrukcie pre učiteľov:</div><span>[https://kempelen.dai.fmph.uniba.sk/design/index.php/In%C5%A1trukcie_-_L-syst%C3%A9m učitelia - l-systém]</span></div>
     </div>
     </div>
         <p>Keďže sme už s rekurziou oboznámení, dokážeme ju použiť aj na zložitejšie modely akým môžu byť napríklad Lindenmayerove systémy (l-systémy). L-systémy sú formálne systémy, ktoré boli pôvodne vyvinuté ako modely rastu buniek v rastlinách. Sú definované pomocou abecedy symbolov a sady pravidiel pre transformáciu symbolov. L-systémy sa používajú na generovanie fraktálov a iných fraktálnych štruktúr tým, že rekurzívne aplikujú pravidlá na počiatočnú sekvenciu symbolov, čím vytvárajú komplexné a detailné obrazce.</p>
         <p>Keďže sme už s rekurziou oboznámení, dokážeme ju použiť aj na zložitejšie modely akým môžu byť napríklad Lindenmayerove systémy (l-systémy). L-systémy sú formálne systémy, ktoré boli pôvodne vyvinuté ako modely rastu buniek v rastlinách. Sú definované pomocou abecedy symbolov a sady pravidiel pre transformáciu symbolov. L-systémy sa používajú na generovanie fraktálov a iných fraktálnych štruktúr tým, že rekurzívne aplikujú pravidlá na počiatočnú sekvenciu symbolov, čím vytvárajú komplexné a detailné obrazce.</p>
Riadok 16: Riadok 16:
         <h3>Zadanie úlohy</h3>
         <h3>Zadanie úlohy</h3>
         <p>
         <p>
             V tejto aktivite budeme vytvárať jednoduchý l-systém podobajúci sa (vyschnutému) stomu. Využijeme na to väčšinu poznatkov, ktoré sme doposiaľ nadobudli, njamä rekurziu, modifikáciu parametrov a podmienky. Pre implementáciu takéhoto systému si potrebujeme definovať podmienky akými sa budeme riadiť pri každom jednom objekte, ktorý do celkového modelu budeme pridávať. Podmienky nám môžu rozhodovať o rotácii, veľkosti a podobne. Tu máme príklad jednoduchého 2D fraktálu generovaného l-systémom:<br>[[File:l-system_generating_fractal.png|alt=obrázok generovania l-systému|420px]]
             V tejto aktivite budeme vytvárať jednoduchý l-systém podobajúci sa stomu. Využijeme na to väčšinu poznatkov, ktoré sme doposiaľ nadobudli, njamä rekurziu, modifikáciu parametrov a podmienky. Pre implementáciu takéhoto systému si potrebujeme definovať podmienky akými sa budeme riadiť pri každom jednom objekte, ktorý do celkového modelu budeme pridávať. Podmienky nám môžu rozhodovať o rotácii, veľkosti a podobne. Tu máme príklad jednoduchého 2D fraktálu generovaného l-systémom:<br>[[File:l-system_generating_fractal.png|alt=obrázok generovania l-systému|420px]]<br>
V L-systémoch implementujeme:<br>
* Axiómu: počiatočná štruktúra alebo stav systému, ktorý je reprezentovaný symbolmi
* Pravidlá pre transformáciu: tieto pravidlá určujú, ako sa každý symbol v axiomate mení na iný symbol v každom kroku iterácie
* Iteráciu: proces opakovania transformačných pravidiel, kde sa postupne mení axiom a generuje sa nový reťazec symbolov<br>
Pre predstavu ako sa taký systém správa si pozrite nasledovný obrázok s prepisom pravidiel kde každú vrstvu vzniknutého stormu si môžeme predstaviť ako jednu iteráciu:<br>
[[File:l-system_rules.png|alt=obrázok prepisu pravidiel v l-systéme|400px]]<br>
 
Rovnakým princípom vieme implementovať aj náš l-systém.
         </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://sk.wikipedia.org/wiki/L-syst%C3%A9m L-systém]</li>
        </ul>
     </div>
     </div>


Riadok 38: Riadok 60:
branches  = 4;  // - počet vetiev, na ktoré sa pri každej iterácii konkrétna vetva rozdelí
branches  = 4;  // - počet vetiev, na ktoré sa pri každej iterácii konkrétna vetva rozdelí
angle    = 40;  // - uhol natočenia novo vznikajúcich vetiev
angle    = 40;  // - uhol natočenia novo vznikajúcich vetiev
reduction = 0.8; // - redukcia / postupné zmenšovanie dlžok a šírok axióm pri každej iterácii
reduction = 0.8; // - redukcia / postupné zmenšovanie dĺžok a šírok axióm pri každej iterácii
</pre>
</pre>
</li>
</li>
Riadok 61: Riadok 83:
             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>
            <li>[https://sk.wikipedia.org/wiki/L-syst%C3%A9m L-systém]</li>
        </ul>
     </div>
     </div>



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

   https://kempelen.dai.fmph.uniba.sk/design/images/3/38/L-system_tree.stl

L-systém

Trvanie:
1.5 hod
Náročnosť:
pokročilý
Nástroje:
BlocksCAD alebo OpenSCAD
Inštrukcie pre učiteľov:
učitelia - l-systém

Keďže sme už s rekurziou oboznámení, dokážeme ju použiť aj na zložitejšie modely akým môžu byť napríklad Lindenmayerove systémy (l-systémy). L-systémy sú formálne systémy, ktoré boli pôvodne vyvinuté ako modely rastu buniek v rastlinách. Sú definované pomocou abecedy symbolov a sady pravidiel pre transformáciu symbolov. L-systémy sa používajú na generovanie fraktálov a iných fraktálnych štruktúr tým, že rekurzívne aplikujú pravidlá na počiatočnú sekvenciu symbolov, čím vytvárajú komplexné a detailné obrazce.


Zadanie úlohy

V tejto aktivite budeme vytvárať jednoduchý l-systém podobajúci sa stomu. Využijeme na to väčšinu poznatkov, ktoré sme doposiaľ nadobudli, njamä rekurziu, modifikáciu parametrov a podmienky. Pre implementáciu takéhoto systému si potrebujeme definovať podmienky akými sa budeme riadiť pri každom jednom objekte, ktorý do celkového modelu budeme pridávať. Podmienky nám môžu rozhodovať o rotácii, veľkosti a podobne. Tu máme príklad jednoduchého 2D fraktálu generovaného l-systémom:
obrázok generovania l-systému
V L-systémoch implementujeme:

  • Axiómu: počiatočná štruktúra alebo stav systému, ktorý je reprezentovaný symbolmi
  • Pravidlá pre transformáciu: tieto pravidlá určujú, ako sa každý symbol v axiomate mení na iný symbol v každom kroku iterácie
  • Iteráciu: proces opakovania transformačných pravidiel, kde sa postupne mení axiom a generuje sa nový reťazec symbolov
Pre predstavu ako sa taký systém správa si pozrite nasledovný obrázok s prepisom pravidiel kde každú vrstvu vzniknutého stormu si môžeme predstaviť ako jednu iteráciu:
obrázok prepisu pravidiel v l-systéme
Rovnakým princípom vieme implementovať aj náš l-systém.

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ť obrázok a predstaviť si opakovania, ktoré pri implementácii robíme a čo potrebujeme skontrolovať pri každej iterácii.
  3. Vytvárame rekurziu, takže dávame pozor na podmienku, menu parametrov a nekonečné volania (ako sme sa naučili v predošlích príkladoch).
  4. Implementujte do funkcie opakujúce sa štruktúry, ktoré ste si všimli na obrázku.
  5. Ak sme implementovali tieto opakujúce sa štruktúry - vetvy stromu a umiestnili ich aspoň približne správne, je potrebné definovať podmienky a parametre pre zmeny týchto jednotlivých vetiev. Môžeme meniť rotáciu na daných osiach, posun, výšku či šírku daných vetiev, dokonca aj ich zakrivenie, predstavivosti sa medze nekladú. Pokúste sa implementovať čo najviac parametrov pre čo najviac rôznorodý storm.
  6. Ukážka a vysvetlenie implementácie l-systému s parametrami a pravidlami pre prvých 5 iterácií:
    Openscad l-system 01.png -> Openscad l-system 02.png -> Openscad l-system 03.png -> Openscad l-system 04.png->Openscad l-system 05.png
    Na prvom obrázku vidíme axiómu - základnú štruktúru, s ktorou budeme pracovať (v našom prípade valec).
    Tu vidíme parametre s komentármi k tomu ako fungujú a čo ovplyvňujú, tieto parametre použijeme na implementáciu pravidiel v l-systémoch:
    length    = 40;  // - dĺžka axiómy
    width     = 4;   // - šírka axiómy
    depth     = 4;   // - hĺbka zanorenia rekurzie - parameter je dôležitý na zastavenie rekurzie
    branches  = 4;   // - počet vetiev, na ktoré sa pri každej iterácii konkrétna vetva rozdelí
    angle     = 40;  // - uhol natočenia novo vznikajúcich vetiev
    reduction = 0.8; // - redukcia / postupné zmenšovanie dĺžok a šírok axióm pri každej iterácii
    
  7. Preskúmajte parametre, ktoré ste implementovali a vytvorte medzi nimi vzťahy tak ako môžete vidieť vo vzorovom riešení.
  8. Skúste si meniť parametre a podmienky, ktoré ste implementovali aby ste si vizualizovali ako parametrický dizajn naozaj funguje a zakaždým si skúste vyrenderovať váš unikátny strom.

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:

  • vyskúšať implementovať na vetvy listy
  • vyskúšajte si pozmeniť parametre, obzvlášť parameter pre redukciu aby ste videli aký masícny to má násleodk na výsledný model
  • vo vzorovom riešení vidíme celkom pravidelný strom, skúste implementovať pravidlá pre rotáciu, dĺžky a šírky vetví tak aby bol strom čo najmenej pravidelný, prípadne skúste implmentovať zahnutie stromu akoby stál v silnom vetri a nakláňal sa na stranu

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 aktivite sme si vytvorili náš prvý l-systém (Lindenmayerov systém). L-systémy sú pravidlá, ktoré používame na vytváranie modelov rôznych prírodných útvarov - stromy, rastliny alebo dokonca niektoré mikroorganizmy. Tieto pravidlá nám pomáhajú pochopiť, ako sa tieto útvary vyvíjajú a menia v čase. Keď vymodelujeme strom v CAD softvéri, vytvoríme si taký druh "digitálneho obrazu" tohto stromu na počítači. Potom použijeme pravidlá L-systémov na to, aby sme mohli stromu povedať ako má rásť, vetviť sa, (čo dokonca tvoriť listy a kvety).