L-systém: Porovnání verzí
Smazaný obsah Přidaný obsah
m →Kontextové L-systémy: typografie za použití AWB |
|||
(Není zobrazeno 14 mezilehlých verzí od 10 dalších uživatelů.) | |||
Řádek 1:
{{Dobrý článek}}
[[
'''L-systém''' nebo také '''[[Aristid Lindenmayer|Lindenmayerův]] systém''' je varianta [[Formální gramatika|formální gramatiky]], vyvinutá pro modelování růstu [[Rostliny|rostlin]]. L-systém popisuje [[Formální gramatika|pravidla]] pro vývoj rostliny, která se opakovaně aplikují na vznikající [[Model (abstrakce)|model]]. Tato pravidla mohou např. popisovat, za jakých podmínek se [[stonek]] rostliny rozdvojí, zda má vzniknout [[list]] nebo zda má část rostliny uhynout. Výsledný model se může např. vykreslit jako [[Digitální obraz|obrázek]] nebo se z něj vytvoří počítačový [[Počítačová 3D grafika|3D model]] rostliny. L-systémy se také dají použít pro generování různých [[křivka|křivek]], [[fraktál]]ů nebo pro modelování [[buňka|buněčných]] [[organismus|organismů]].
<ref>{{Citace monografie
Řádek 74:
| strany = 301–308
| isbn = 1-58113-374-X
| url-access = registration
| url = https://archive.org/details/siggraph2001conf00fium
}}</ref> nebo pomocí L-systémů lze popisovat podrozdělování (zjemňování) křivek<ref>{{Citace monografie
| titul = L-system description of subdivision curves
Řádek 94 ⟶ 96:
| datum přístupu = 2012-03-01
| jazyk = anglicky
| url archivu = https://web.archive.org/web/20120222212202/http://www.tursiops.cc/fm/
}}</ref><ref>{{Citace monografie▼
| datum archivace = 2012-02-22
| nedostupné = ano
▲ }}</ref><ref>{{Citace monografie
| titul = Musical L-systems
| vydavatel = Nepublikovaná magisterská práce, Institute of Sonology, Hague
Řádek 113 ⟶ 118:
** pro symbol <math>b \in \Sigma</math>, který se neobjevuje na levé straně žádného přepisovacího pravidla, je definována [[Identita (matematika)|identita]] (<math>b \rightarrow b</math>) (takové symboly jsou často označovány jako [[konstanta|konstanty]]).
D0L-systém je velice podobný [[deterministická bezkontextová gramatika|deterministické bezkontextové gramatice]]. Liší se například v tom, že gramatika rozlišuje [[Terminální symbol|terminální]] a [[
Každý symbol z abecedy je obvykle reprezentován jedním [[Znak (počítače)|znakem]] ([[Písmeno|písmenem]]), což značně ulehčuje a zrychluje zápis. Avšak existují i speciální symboly, které jsou zapsány více znaky. Jsou to většinou velmi specifické symboly pro interpretaci. Aby se rozlišily vícepísmenné symboly, dává se před ně nějaký speciální [[
<ref>{{Citace monografie
| titul = Hairs, Textures, and Shades: Improving the Realism of Plant Models Generated with L-Systems
Řádek 181 ⟶ 186:
: 1, 1, 2, 3, 5, 8, 13, 21, …
Výstupní řetězec má stejnou vlastnost, která platí pro Fibonacciho posloupnost, tj. ''i''-té číslo (<math>i>1</math>) je součtem předchozích dvou. Tedy ''i''-tá iterace tvořena spojením iterací <math>i-2</math> a <math>i-1</math>. Malou změnou druhého přepisovacího pravidla na (<tt>B → BA</tt>) bude výsledek splňovat stejné vlastnosti jako původní, jen se budou iterace spojovat
Další zajímavou vlastností řetězců v příkladech 1 a 2 je úzká souvislost se [[Zlatý řez|zlatým řezem]]. Pro <math>i>0</math> platí, že symbol na ''k''-tém místě od neměnného konce (
<math>\varphi = {1+\sqrt5 \over 2} \approx 1,618.</math>
Řádek 210 ⟶ 215:
=== Vykreslování ve 2D ===
[[
Obvyklá (a jedna z nejjednodušších) je interpretace pomocí [[Želví grafika|želví grafiky]]. Tato interpretace chápe symboly jako příkazy pro ''štětec'' (želvu nesoucí štětec), který podle nich kreslí [[Úsečka|úsečky]] a vyplněné [[Mnohoúhelník|polygony]] v [[Rovina|rovině]]. Interpretace probíhá dvoufázově, nejprve se L-systém vygeneruje (''vyiteruje'') do požadované iterace a poté se výsledek interpretuje (kreslí). Pro první fázi musí být zadán počet iterací a pro druhou výchozí stav štětce (želvy). Ten v nejjednodušší variantě obsahuje ''délku kroku'' a ''úhel otočení'' štětce, ale může obsahovat i různé další údaje, jako např. barvu nebo šířku štětce. Během druhé fáze interpretace je také udržován ''stav štětce'' v rovině, tedy v jakém místě se nachází a jak je orientován. V následující tabulce je shrnuta obvyklá interpretace symbolů ve druhé fázi. Tyto příkazy dávají rozkazy štětci (želvě).
Řádek 221 ⟶ 226:
| <tt>a</tt>-<tt>u</tt> || „Pohni se vpřed (bez kreslení).“ (délka pohybu je ''délka kroku'')
|-
| <tt>V</tt>-<tt>Z</tt>, <tt>v</tt>-
|-
| <tt>+</tt>, <tt>-</tt> || „Otoč se doleva (resp. doprava) o předem stanovený úhel.“ (o ''úhel otočení'')
Řádek 241 ⟶ 246:
=== Vykreslování ve 3D ===
Výše uvedená [[2D]] interpretace se dá jednoduše rozšířit do [[3D]]. ''Štětec'' se bude pohybovat v [[Prostor (geometrie)|prostoru]] místo v rovině. Stav bude podobný, tedy bude to poloha a orientace v prostoru. Pro pohyb v trojrozměrném prostoru je třeba více příkazů pro otočení, protože se dá otáčet podle 3 [[Osa|os]] (ve 2D je pouze 1 osa). V následující tabulce je seznam interpretací symbolů, které je potřeba přidat.
[[
{| class="wikitable"
|-
! Symboly !! Interpretace
|-
| <tt>+</tt>, <tt>-</tt> ||
|-
| <tt>^</tt>, <tt>&</tt> ||
|-
| <tt>/</tt>, <tt>\</tt> ||
|}
== Příklady L-systémů ==
=== Kochova vločka ===
[[
Následující předpis vygeneruje část [[Kochova vločka|Kochovy vločky]].
Řádek 268 ⟶ 273:
''pozn.: výchozí poloha štětce (želvy) je vlevo dole a štětec je orientován vpravo''
:''i'' = 0:
:[[
:''i'' = 1: <tt>F+F--F+F</tt>
:[[
:''i'' = 2: <tt>F+F--F+F + F+F--F+F-- F+F--F+F + F+F--F+F</tt>
:[[
:''i'' = 3: <tt>F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F + F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F -- F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F + F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F</tt>
:[[
=== Stromeček ===
Řádek 298 ⟶ 303:
Na následujícím obrázku můžete vidět prvních 6 iterací i s grafickým znázorněním přepisovacích pravidel.
[[
=== Ostrovy a jezera ===
[[
Další [[fraktál]] generovaný pomocí L-systémů se jmenuje ''
{{L-systém
Řádek 314 ⟶ 319:
Výše uvedený předpis pro jednoduchost kreslí pouze hranice [[ostrov]]ů a [[Jezero|jezer]]. Avšak pro lepší představu byl následující obrázek vygenerován rozšířeným předpisem o příkazy, které generují [[polygon]]y.
[[
=== Penroseovo dláždění ===
Řádek 324 ⟶ 329:
| rrp0 = M | rrr0 = O++{.P.----N.[-O.----M.}]++
| rrp1 = N | rrr1 = +{.O.--P.[---M.--N.}]+
| rrp2 = O | rrr2 = -<nowiki/>{.M.++N.[+++O.++P.}]-
| rrp3 = P | rrr3 = --{.O.++++M.[+P.++++N.}]--N
| uhel = 36
Řádek 339 ⟶ 344:
=== Gosperova křivka ===
[[
Následující křivka, která je pojmenovaná po [[Amerika|americkém]] [[matematik]]ovi a [[programátor]]ovi jménem [[Bill Gosper]], splňuje definici [[Peanovy křivky#Plochu-vyplňující křivky|plochu-vyplňující křivky]] a také [[Peanovy křivky#FASS křivky|FASS křivky]].
Řádek 352 ⟶ 357:
Na následujícím obrázku je 5. iterace Gosperovy křivky plynule obarvena celým [[Barevné spektrum|barevným spektrem]] od červené až po fialovou. Díky tomu lze vidět, kudy a jak křivka vede.
[[
== Parametrické L-systémy ==
Řádek 385 ⟶ 390:
! Symboly !! Interpretace, kde 1. parametr má hodnotu ''X''
|-
| <tt>A</tt>-<tt>U</tt>,<tt>0</tt>-<tt>9</tt> ||
|-
| <tt>a</tt>-<tt>u</tt> ||
|-
| <tt>+</tt>, <tt>-</tt> ||
|}
Řádek 398 ⟶ 403:
! Zápis !! Interpretace
|-
| <tt>F(1, 2)</tt> ||
|-
| <tt>+(80)</tt> ||
|-
| <tt>F</tt> resp. <tt>F()</tt> ||
|-
| <tt>+(,0)</tt> ||
|}
=== Příklady ===
[[
Jako jednoduchý příklad parametrického L-systému poslouží [[fraktál]] jménem [[H-strom]]. Říká se mu tak proto, že pro vhodně zvolené hodnoty ''proměnných'' vypadá jako písmena ''H'' tvořená z písmen ''H'', tvořená z písmen ''H''…
Řádek 419 ⟶ 424:
}}
''R'' a ''U'' jsou ''proměnné'' L-systému (nejsou to symboly abecedy, ani nemají nic společného s parametrickými L-systémy). Pro jejich různé hodnoty bude výsledek vypadat odlišně. Obvyklými hodnotami jsou ''R'' = 1/√2 a ''U'' = 90. Zajímavé je, že s těmito hodnotami tvoří H-strom [[Peanovy křivky#Plochu-vyplňující křivky|plochu-vyplňující]] L-systém (a je dokonce v kategorii ''[[Peanovy křivky#FASS křivky|FASS]]'').
[[image:H-tree-85.svg|H-strom s parametry R = 0,99 a U = 85]]▼
Praktičtější ukázkou parametrických L-systémů je následující předpis ze str. 123<ref name="abop" /> a jedná se o velmi jednoduchý L-systém modelující [[růst]] [[list]]u rostliny. Čím vyšší iterace, tím vyspělejší list. Tento předpis má i své nevýhody, růst se nikdy nezastaví a pro iterace větší než 20 není použitelný. Pro ovlivnění rychlosti růstu a jeho zastavení by se dal použít složitější předpis.
Řádek 440 ⟶ 444:
''K'' je konstanta představující délku kroku. Je použita jen kvůli tomu, aby stonek (tvořený symboly <tt>S</tt>) nebyl příliš dlouhý (roste 2× pomaleji než list), může se zvolit např. 1. Na obrázku níže je 5. až 21. iterace L-systému listu.
[[
=== Podmíněná přepisovací pravidla ===
Parametry symbolů se také dají použít k podmínění přepsání symbolu. K tomu slouží '''podmíněná přepisovací pravidla'''. Podmíněné přepisovací pravidlo je rozšířené běžné přepisovací pravidlo o podmínku. Přepisování pak probíhá tak, že se uvedená podmínka vyhodnotí, a když je pravdivá, přepisovací pravidlo se použije. Pokud pravdivá není, hledá se další vhodné přepisovací pravidlo. Pořadí ověřování přepisovacích pravidel musí být dáno (aby se zachoval determinismus), např. od dříve uvedených pravidel k později uvedeným. Pokud symbol není přepsán žádným přepisovacím pravidlem, platí pro něj [[Identita (matematika)|identita]] jako výchozí přepisovací pravidlo (je tedy zkopírován do další iterace).
[[
Ukázkou podmíněného přepisování je list [[růže]] ze str. 126.<ref name="abop" />
Řádek 455 ⟶ 459:
| rrp1 = x(t,d) | rrr1 = . g(5, 1.15, -1) . [-y(t) g(3, 1.19, t) .}] [-y(t) {.] x(t+1, d) | rrc1 = d = 1
| rrp2 = y(t) | rrr2 = g(1.3, 1.25, -1) y(t-1) | rrc2 = t > 0
| rrp3 = g(s,r,t) | rrr3 = g(s*r, r, t
| rrp4 = g(s,r,t) | rrr4 = g(s*r, r, -1) | rrc4 = t = -1
| uhel = 60
Řádek 478 ⟶ 482:
Výsledek vykreslení bude díky stochastismu pokaždé trochu jiný, na následujícím obrázku je 9 interpretací 6. generace, uprostřed je L-systém bez randomizace.
[[
=== Náhodný výběr přepisovacího pravidla ===
Řádek 498 ⟶ 502:
8 různých výsledků je na obrázku níže (9. uprostřed bez stochastismu).
[[
== Kontextové L-systémy ==
Řádek 508 ⟶ 512:
| spoluautoři = a kol.
| počet stran = 32
| strany =
| vydavatel = CSIRO Publishing
| místo = Calgary, Alberta, Canada
Řádek 567 ⟶ 571:
=== Plugin pro Blender ===
[[Blender]] je [[Otevřený software|open-source]] program pro modelování a vykreslování [[3D]] [[počítačová grafika|počítačové grafiky]], do kterého se dá stáhnout [[plugin]]<ref>Domácí stránka pluginu pro generování L-systémů v Blenderu: [http://lsystem.liquidweb.co.nz/] {{Wayback|url=http://lsystem.liquidweb.co.nz/ |date=20110415080335 }}</ref>, který generuje rostliny pomocí L-systémů. Odlišností tohoto pluginu od ostatních programů je ta, že grafik nezadává předpis L-systému, ale pouze vizuálně nastavuje parametry výsledného modelu rostliny.
<!--
== Implementace ==
Následující [[Zdrojový kód|kód]] je jednoduchá [[implementace]] paralelního přepisování L-systému. Zajímavé na něm je to, že nemá 2 fáze, jak bylo popsáno v úvodu k interpretaci, ale prochází L-systém
<
static string rewrite(string axiom, Dictionary<char, string> rewriteRules, int iterations) {
const char genEnd = '\x00'; // speciální znak pro detekci konce generace v zásobníku
Řádek 610 ⟶ 614:
return result.ToString();
}
</syntaxhighlight>
-->
== Reference ==
<references />
== Související články ==
Řádek 622 ⟶ 626:
== Externí odkazy ==
* {{Commonscat
* Seriál o L-systémech na serveru root.cz: [http://www.root.cz/clanky/l-systemy-prirodni-objekty-i-umele-artefakty/ L-systémy: přírodní objekty i umělé artefakty]
* Část diplomové práce Pavla Tišnovského: [http://www.fit.vutbr.cz/~tisnovpa/publikace/diplomka/doc/node20.html L-systémy]
* {{en}} [http://algorithmicbotany.org/papers/ Algorithmic botany] – stránka [[Univerzita Calgary|Univerzity Calgary]] kde [[Przemyslaw Prusinkiewicz|Dr. Przemyslaw Prusinkiewicz]] spolu s jeho studenty a kolegy publikuje své práce
{{Autoritní data}}
[[Kategorie:Formální jazyky]]
|