21.03.2015 Views

vysoké učení technické v brně l-systémy a systémy iterovaných funkcí

vysoké učení technické v brně l-systémy a systémy iterovaných funkcí

vysoké učení technické v brně l-systémy a systémy iterovaných funkcí

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ<br />

BRNO UNIVERSITY OF TECHNOLOGY<br />

FAKULTA STROJNÍHO INŽENÝRSTVÍ<br />

ÚSTAV AUTOMATIZACE A INFORMATIKY<br />

FACULTY OF MECHANICAL ENGINEERING<br />

INSTITUTE OF AUTOMATION AND COMPUTER SCIENCE<br />

L-SYSTÉMY A SYSTÉMY ITEROVANÝCH FUNKCÍ<br />

– POPIS A REALIZACE V PROSTREDÍ MATLAB<br />

L-SYSTEMS AND ITERATED FUNCTION SYSTEM – DESCRIPTION AND APPLICATION IN<br />

MATLAB ENVIRONMENT<br />

BAKALÁŘSKÁ PRÁCE<br />

BACHELOR'S THESIS<br />

AUTOR PRÁCE<br />

AUTHOR<br />

VEDOUCÍ PRÁCE<br />

SUPERVISOR<br />

Mgr. ROBERT ZÁLEŠÁK<br />

Ing. RADOMIL MATOUŠEK, Ph.D.<br />

BRNO 2007


Vysoké učení technické v Brně, Fakulta strojního inženýrství<br />

Ústav automatizace a informatiky<br />

Akademický rok: 2006/07<br />

ZADÁNÍ BAKALÁŘSKÉ PRÁCE<br />

student: Zálešák Robert, Mgr.<br />

který studuje v bakalářském studijním programu<br />

obor: Aplikovaná informatika a řízení (3902R001)<br />

Ředitel ústavu Vám v souladu se zákonem č. 111/1998 o vysokých školách a se<br />

Studijním a zkušebním řádem VUT v Brně určuje následující téma bakalářské práce:<br />

L-systémy a systémy iterovaných funkcí – popis a realizace v prostředí Matlab<br />

v anglickém jazyce:<br />

L-systems and Iterated Function System – Description and Application in<br />

Matlab Enverioment<br />

Stručná charakteristika problematiky úkolu:<br />

Bakalářská práce bude stručně popisovat a prakticky realizovat vybrané třídy<br />

fraktálních objektů označovaných jako Lindenmayerovy systémy a systémy iterovaných<br />

funkcí. Tyto dvě kategorie zcela odlišně definovaných fraktálů, kterých je možno užít<br />

k procedurálnímu modelování rozličných těles (objektů), budou stručně popsány a dále<br />

prakticky realizovány v prostředí Matlab.<br />

Cíle bakalářské práce:<br />

1. Stručný popis problematiky s ohledem na přiměřenou rešerši dostupných zdrojů.<br />

2. Praktickou realizaci v prostředí Matlab. Realizace bude zahrnovat: modulární řešení<br />

(funkce) pro výpočet a vizualizaci L-systémů a IFS, včetně importu a exportu dat<br />

prostředky Matlabu.<br />

3. Pokus o pokročilou vizualizaci realizované třídy fraktálů.


Seznam odborné literatury:<br />

Mařík, V. a kol.: Umělá inteligence (3), Academia, Praha 2002, ISBN 80-200-0504-8<br />

Vedoucí bakalářské práce: Ing. Radomil Matoušek, Ph.D.<br />

Termín odevzdání bakalářské práce je stanoven časovým plánem akademického roku<br />

2006/07.<br />

V Brně dne 15.12.2006<br />

L.S.<br />

doc. RNDr. Ing. Miloš Šeda, Ph.D.<br />

Ředitel ústavu<br />

doc. RNDr. Miroslav Doupovec, CSc.<br />

Děkan fakulty


1. Pan/paní<br />

LICENČNÍ SMLOUVA<br />

POSKYTOVANÁ K VÝKONU PRÁVA UŽÍT ŠKOLNÍ DÍLO<br />

uzavřená mezi smluvními stranami:<br />

Jméno a příjmení: Robert Zálešák<br />

Bytem: Kupkova 15, Brno, 638 00<br />

Narozen/a (datum a místo): 9.4.1981, Brno<br />

(dále jen „autor“)<br />

2. Vysoké učení technické v Brně<br />

Fakulta strojního inženýrství<br />

se sídlem Technická 2896/2, 616 69 Brno<br />

a<br />

jejímž jménem jedná na základě písemného pověření děkanem fakulty:<br />

Doc. RNDr. Ing. Miloš Šeda, Ph.D., ředitel ÚAI<br />

(dále jen „nabyvatel“)<br />

Čl. 1<br />

Specifikace školního díla<br />

1. Předmětem této smlouvy je vysokoškolská kvalifikační práce (VŠKP):<br />

□ disertační práce<br />

□ diplomová práce<br />

□ bakalářská práce<br />

□ jiná práce, jejíž druh je specifikován jako<br />

.......................................................<br />

(dále jen VŠKP nebo dílo)<br />

Název VŠKP:<br />

Vedoucí/ školitel VŠKP:<br />

Ústav:<br />

Datum obhajoby VŠKP:<br />

L-systémy a systémy iterovaných funkcí – popis a<br />

realizace v prostředí Matlab<br />

Ing. Radomil Matoušek, Ph.D.<br />

Ústav automatizace a informatiky<br />

VŠKP odevzdal autor nabyvateli v * :<br />

□ tištěné formě – počet exemplářů …2……………..<br />

□ elektronické formě – počet exemplářů …3……………..<br />

*<br />

hodící se zaškrtněte


2. Autor prohlašuje, že vytvořil samostatnou vlastní tvůrčí činností dílo shora popsané<br />

a specifikované. Autor dále prohlašuje, že při zpracovávání díla se sám nedostal do<br />

rozporu s autorským zákonem a předpisy souvisejícími a že je dílo dílem původním.<br />

3. Dílo je chráněno jako dílo dle autorského zákona v platném znění.<br />

4. Autor potvrzuje, že listinná a elektronická verze díla je identická.<br />

Článek 2<br />

Udělení licenčního oprávnění<br />

1. Autor touto smlouvou poskytuje nabyvateli oprávnění (licenci) k výkonu práva<br />

uvedené dílo nevýdělečně užít, archivovat a zpřístupnit ke studijním, výukovým a<br />

výzkumným účelům včetně pořizovaní výpisů, opisů a rozmnoženin.<br />

2. Licence je poskytována celosvětově, pro celou dobu trvání autorských a<br />

majetkových práv k dílu.<br />

3. Autor souhlasí se zveřejněním díla v databázi přístupné v mezinárodní síti<br />

□ ihned po uzavření této smlouvy<br />

□ 1 rok po uzavření této smlouvy<br />

□ 3 roky po uzavření této smlouvy<br />

□ 5 let po uzavření této smlouvy<br />

□ 10 let po uzavření této smlouvy<br />

(z důvodu utajení v něm obsažených informací)<br />

4. Nevýdělečné zveřejňování díla nabyvatelem v souladu s ustanovením § 47b zákona<br />

č. 111/ 1998 Sb., v platném znění, nevyžaduje licenci a nabyvatel je k němu povinen<br />

a oprávněn ze zákona.<br />

Článek 3<br />

Závěrečná ustanovení<br />

1. Smlouva je sepsána ve třech vyhotoveních s platností originálu, přičemž po jednom<br />

vyhotovení obdrží autor a nabyvatel, další vyhotovení je vloženo do VŠKP.<br />

2. Vztahy mezi smluvními stranami vzniklé a neupravené touto smlouvou se řídí<br />

autorským zákonem, občanským zákoníkem, vysokoškolským zákonem, zákonem o<br />

archivnictví, v platném znění a popř. dalšími právními předpisy.<br />

3. Licenční smlouva byla uzavřena na základě svobodné a pravé vůle smluvních stran,<br />

s plným porozuměním jejímu textu i důsledkům, nikoliv v tísni a za nápadně<br />

nevýhodných podmínek.<br />

4. Licenční smlouva nabývá platnosti a účinnosti dnem jejího podpisu oběma<br />

smluvními stranami.<br />

V Brně dne: …………………………………….<br />

………………………………………..<br />

Nabyvatel<br />

..…………………………………<br />

Autor


ABSTRAKT<br />

Práce se zabývá dvěma třídami fraktálních objektů označovaných jako L-<br />

systémy a systémy iterovaných funkcí. Je proveden jejich stručný popis včetně rešerše<br />

týkající se základních pojmů z oblasti fraktálů. Dále je provedena jejich praktická<br />

realizace s využitím matematického softwaru Matlab. Pro geometrickou interpretaci<br />

fraktálů vytvořených pomocí L-systémů je využito tzv. želví grafiky. IFS fraktály jsou<br />

vytvářeny s využitím algoritmu náhodné procházky. Na závěr je provedena pokročilá<br />

vizualizace a to s využitím programu POV-Ray.<br />

ABSTRACT<br />

Thesis deals with two classes of fractal objects known as L-systems and iterated<br />

function systems (IFS). Brief description is made including insight into basic definitions<br />

in fractals area. Then their practical realization is performed using mathematical<br />

software Matlab. For geometrical interpretation of fractals created by L-systems "turtle<br />

graphics" is used. IFS fractals are created using random walk algorithm. Finally<br />

advanced visualization is made using software POV-Ray.<br />

KLÍČOVÁ SLOVA<br />

Fraktály, Lindenmayerovy sytémy (L-systémy), systémy iterovaných funkcí<br />

(IFS), želví grafika, algoritmus náhodné procházky (RWA)<br />

KEYWORDS<br />

Fractals, Lindenmayer systems (L-systems), iterated function systems (IFS),<br />

turtle graphics, random walk algorithm (RWA)<br />

7


Děkuji Ing. Radomilu Matouškovi, Ph.D. za odborné vedení a za poskytnuté<br />

konzultace, které mi pomohly vypracovat tuto bakalářskou práci.<br />

9


OBSAH<br />

ZADÁNÍ BAKALÁŘSKÉ PRÁCE ............................................................................3<br />

LICENČNÍ SMLOUVA..............................................................................................5<br />

ABSTRAKT, KLÍČOVÁ SLOVA..............................................................................7<br />

1 ÚVOD.................................................................................................................13<br />

2 FRAKTÁLY ......................................................................................................15<br />

2.1 HISTORICKÝ VÝVOJ FRAKTÁLŮ......................................................................15<br />

2.2 DEFINICE FRAKTÁLŮ, VYMEZENÍ POJMŮ.........................................................16<br />

2.2.1 Definice fraktálů ......................................................................................16<br />

2.2.2 Soběpodobnost a soběpříbuznost..............................................................17<br />

2.2.3 Fraktální dimenze.....................................................................................17<br />

2.3 DĚLENÍ FRAKTÁLŮ........................................................................................18<br />

2.4 VYUŽITÍ FRAKTÁLŮ ......................................................................................19<br />

3 L – SYSTÉMY...................................................................................................21<br />

3.1 ÚVOD DO L-SYSTÉMŮ ...................................................................................21<br />

3.2 ŽELVÍ GRAFIKA.............................................................................................22<br />

3.3 FRAKTÁLY VYTVOŘENÉ POMOCÍ DETERMINISTICKÝCH L-SYSTÉMŮ ................22<br />

3.3.1 Kochova křivka a Kochova vločka ...........................................................22<br />

3.3.2 Sierpinského trojúhelník...........................................................................24<br />

3.3.3 Hilbertova, Peano-Gosperova a dračí křivka.............................................25<br />

3.3.4 Použití zásobníku pro větvící se struktury ................................................26<br />

3.4 STOCHASTICKÉ L-SYSTÉMY ..........................................................................29<br />

4 SYSTÉMY ITEROVANÝCH FUNKCÍ ...........................................................31<br />

4.1 ÚVOD DO SYSTÉMŮ ITEROVANÝCH FUNKCÍ....................................................31<br />

4.2 TEORIE SYSTÉMŮ ITEROVANÝCH FUNKCÍ .......................................................32<br />

4.2.1 Afinní transformace .................................................................................32<br />

4.2.2 Algoritmus náhodné procházky................................................................33<br />

4.3 FRAKTÁLY VYTVOŘENÉ POMOCÍ IFS .............................................................33<br />

4.3.1 Kochova křivka........................................................................................33<br />

4.3.2 Sierpinského trojúhelník...........................................................................34<br />

4.3.3 Barnsleyovo kapradí.................................................................................35<br />

4.3.4 Sierpinského kobereček............................................................................36<br />

4.3.5 Některé další známé příklady IFS fraktálů................................................37<br />

5 REALIZACE FRAKTÁLŮ V PROSTŘEDÍ MATLAB..................................39<br />

5.1 SCHÉMA REALIZACE......................................................................................39<br />

5.2 REALIZACE L-SYSTÉMŮ ................................................................................40<br />

5.3 REALIZACE IFS FRAKTÁLŮ............................................................................41<br />

6 POKROČILÁ VIZUALIZACE ........................................................................45<br />

11


OBSAH<br />

6.1 ÚVOD DO PROGRAMU POV-RAY .................................................................. 45<br />

6.2 EXPORT DAT Z MATLABU A VYTVÁŘENÍ SCÉN V PROGRAMU POV-RAY......... 46<br />

6.3 UKÁZKY VIZUALIZACE S VYUŽITÍM PROGRAMU POV-RAY............................ 47<br />

6.4 ANIMACE..................................................................................................... 49<br />

7 ZÁVĚR.............................................................................................................. 51<br />

LITERATURA ......................................................................................................... 53<br />

PŘÍLOHY................................................................................................................. 55<br />

PŘEHLED FRAKTÁLŮ VYTVOŘENÝCH POMOCÍ L-SYSTÉMŮ......................................... 55<br />

PŘEHLED FRAKTÁLŮ VYTVOŘENÝCH POMOCÍ IFS..................................................... 59<br />

CD NOSIČ................................................................................................................ 63<br />

12


1 ÚVOD<br />

Tato práce se zabývá dvěma třídami fraktálů (fraktálních objektů) označovaných<br />

jako Lindenmayerovy systémy (zkráceně L-systémy) a systémy iterovaných funkcí<br />

(zkráceně IFS). Mezi cíle této práce patří stručná rešerše týkající se vymezení a<br />

vysvětlení základních pojmů z oblasti fraktálů a fraktální geometrie s detailnějším<br />

zaměřením na L-systémy a systémy iterovaných funkcí. Další cíle představují provedení<br />

praktické realizace těchto tříd fraktálů v prostředí Matlab a pokus o pokročilou<br />

vizualizaci.<br />

Kapitola 2 stručně shrnuje historický vývoj fraktálů, zabývá se definicí pojmu<br />

fraktál a vysvětluje další pojmy, které s fraktály úzce souvisí, jako jsou soběpodobnost,<br />

fraktální (nebo též Hausdorffova) dimenze apod. Je v ní také provedeno rozdělení a<br />

využití fraktálů.<br />

Kapitola 3 se zaměřuje na L-systémy. Jsou v ní vysvětleny základní pojmy týkající<br />

se L-systémů včetně pojmu želví grafika, pomocí které jsou fraktály vytvořené L-<br />

systémy zobrazovány. Podstatná část této kapitoly je také věnována popisům a<br />

konstrukcím fraktálů vytvářených pomocí deterministických i stochastických L-<br />

systémů. Konkrétně se jedná o Kochovu křivku, Kochovu vločku, Sierpinského<br />

trojúhelník, Hilbertovu křivku, různé rostliny vytvářené deterministicky i stochasticky<br />

a další.<br />

Kapitola 4, která pojednává o systémech iterovaných funkcí, se mimo jiné zabývá<br />

afinními transformacemi, pomocí kterých IFS generují fraktály. Jedna z podkapitol této<br />

kapitoly je také věnována algoritmu náhodné procházky (zkráceně RWA), který je<br />

využit při vytváření fraktálů, které jsou součástí této kapitoly. Patří mezi ně Kochova<br />

křivka, Sierpinského trojúhelník, Barnsleyovo kapradí, Sierpinského kobereček,<br />

sněhová vločka a další.<br />

V kapitole 5 je nejprve obecně popsán postup, podle kterého byly v prostředí<br />

Matlab prakticky realizovány dvě výše zmíněné třídy fraktálů. Další části se zabývají<br />

konkrétními způsoby realizace L-systémů a IFS fraktálů.<br />

Kapitola 6 se zabývá pokročilou vizualizací fraktálů generovaných v matematickém<br />

softwaru Matlab. K této vizualizaci je použit program POV-Ray, do kterého jsou data<br />

získaná pomocí Matlabu importována. V další části této kapitoly jsou uvedeny<br />

konkrétní ukázky vizualizace s využitím programu POV-Ray. Kapitola končí zmínkou o<br />

možnosti vytváření animací v programu POV-Ray.<br />

V příloze se nachází přehledy fraktálů, které byly v rámci této práce pomocí L-<br />

systémů a systémů iterovaných funkcí vytvořeny.<br />

13


2 FRAKTÁLY<br />

V této kapitole je nejprve stručně shrnut historický vývoj fraktálů. Další část se<br />

zabývá definováním pojmu fraktál a vymezením dalších pojmů, které s fraktály úzce<br />

souvisí. Dále je provedeno rozdělení fraktálů a závěr této kapitoly je věnován využití<br />

fraktálů.<br />

2.1 Historický vývoj fraktálů<br />

Matematické konstrukce podivných útvarů, které se značně lišily od geometricky<br />

„ideálních“ objektů, se začaly objevovat na přelomu 19. a 20. století [02].<br />

Mezi takové konstrukce patřila spojitá funkce, která nemá v žádném bodě<br />

derivaci, objevená Karlem Weierstrassem v roce 1872. Tato funkce se chová jako<br />

fraktál, neboť zvětšené části grafu a původní graf jsou podobné (pojmem soběpodobnost<br />

se bude zabývat kapitola 2.2.2. Soběpodobnost a soběpříbuznost). Roku 1884 Georg<br />

Cantor přišel s diskontinuem. Cantorovo diskontinuum (viz [13]) představuje množinu<br />

(tzv. Cantorovu množinu), která je konstruována v iteračních krocích, kdy na počátku je<br />

dán uzavřený interval [0,1] a v každém kroku je vynechána druhá třetina tohoto<br />

intervalu a všech dalších, které zbyly z předchozích iterací. Cantorova množina je<br />

znázorněna na obr. 1 (převzato z [13]). Následně v roce 1904 sestrojil Helge von Koch<br />

nekonečně dlouhou křivku, která ohraničuje konečnou plochu. Tzv. Kochova křivka<br />

bude podrobně popsána v pozdějších kapitolách. V roce 1918 Gaston Maurice Julia a<br />

Pierre Fatou popsali konstrukci tzv. Juliových množin a roku 1919 podal Felix<br />

Hausdorff definici Hausdorffovy (nebo také fraktální) dimenze, která pro mnohé<br />

objekty vychází neceločíselná. Hausdorffovou dimenzí se bude zabývat kapitola 2.2.3<br />

Fraktální dimenze.<br />

Obr. 1 Cantorova množina po čtyřech iteracích.<br />

Vědní disciplína zabývající se fraktály se nazývá fraktální geometrie a je<br />

intenzivně rozvíjena od šedesátých let minulého století [06]. Za jejího zakladatele je<br />

považován vědec polského původu Benoid B. Mandelbrot.<br />

15


KAPITOLA 2. FRAKTÁLY<br />

Pojem fractal se poprvé objevuje až v roce 1975 v publikaci, jejímž autorem je B.<br />

B. Mandelbrot. Tento pojem pochází z latinského slova fractus značící zlomený,<br />

rozbitý, apod. (viz [02]).<br />

2.2 Definice fraktálů, vymezení pojmů<br />

2.2.1 Definice fraktálů<br />

Všeobecně platná definice fraktálu prozatím neexistuje (viz [07]). Například<br />

Mandelbrot označil za fraktál množinu, jejíž hodnota Hausdorffovy dimenze je větší<br />

než hodnota dimenze topologické [05] (bude vysvětleno v kapitole 2.2.3 Fraktální<br />

dimenze).<br />

Fraktál lze také charakterizovat jako nekonečně členitý útvar [07], i když se tak<br />

na první pohled nemusí jevit, což je způsobeno nedokonalou rozlišovací schopností<br />

pozorujícího objektu (lidského oka nebo technického zařízení jako je například<br />

obrazovka nebo tiskárna). Neboli co se z dálky může jevit jako objekt jednoduchého<br />

tvaru (například čtverec), může po přiblížení (tedy po změně měřítka) vypadat poněkud<br />

složitěji (obr. 2). Na obr. 2 je zobrazena Hilbertova křivka, která bude zmíněna ještě<br />

v kapitole 3 s názvem L-systémy.<br />

Obr. 2 Hilbertova křivka pozorovaná při změně měřítka (při postupném přibližování).<br />

Za fraktály lze považovat (viz [01]) geometrické objekty, které mají následující<br />

vlastnosti:<br />

• jsou soběpodobné nebo soběpříbuzné<br />

• mají neceločíselnou dimenzi<br />

• mají na první pohled složitý tvar, ale jsou generovány jednoduchými<br />

pravidly<br />

16


KAPITOLA 2. FRAKTÁLY<br />

2.2.2 Soběpodobnost a soběpříbuznost<br />

Soběpodobnost lze definovat [07] jako invarianci (neměnnost) vůči změně<br />

měřítka (obr. 3). Ať je daný soběpodobný útvar pozorován v jakémkoli měřítku,<br />

vykazuje stále stejný charakteristický tvar. Dalo by se tedy říci, že soběpodobnost<br />

znamená opakování sebe sama při určité transformaci, jako je například změna měřítka,<br />

rotace, translace nebo zkosení. Kromě lineárních transformací se může jednat i o<br />

transformace nelineární, vždy to však musí být transformace kontrahující, což znamená,<br />

že vzdálenost dvou libovolných nestejnolehlých bodů se po aplikaci transformace musí<br />

zmenšit.<br />

Obr. 3 Ukázka soběpodobnosti krystalu pomocí změny měřítka.<br />

Soběpříbuznost je určité zobecnění soběpodobnosti. Vyskytuje se u fraktálů,<br />

které jsou generovány stochasticky, tj. pomocí více pravidel, kde každé má přiřazenu<br />

hodnotu pravděpodobnosti výběru. Mezi soběpříbuzné fraktály patří i Mandelbrotova a<br />

Juliovy množiny, i když jsou generovány deterministickými algoritmy (viz [02]).<br />

2.2.3 Fraktální dimenze<br />

Pro základní geometrické útvary a tělesa (jako například čtverec nebo krychli)<br />

jsou známy vzorce a vztahy, díky nimž lze vypočítat jejich geometrické charakteristiky<br />

jako například obvod, obsah nebo objem, a přitom změnou měřítka se tyto<br />

charakteristiky nemění (výsledek je vždy stejný). Například čtverec s danou délkou<br />

strany bude mít při libovolném přibližování (změně měřítka) vždy stejný obvod.<br />

Takovéto útvary nazýváme geometricky hladké [06]. Veličiny jako například obvod,<br />

obsah nebo objem mohou být spočítány i pro poněkud složitější útvary, které vzniknou<br />

kombinací konečného počtu elementárních útvarů, ale výsledky jsou opět nezávislé na<br />

použitém měřítku.<br />

Každému geometricky hladkému útvaru může být přiřazeno jisté celé číslo,<br />

které nazýváme počet rozměrů nebo také (topologická) dimenze daného útvaru (viz<br />

[06]). Hodnota této dimenze udává, jaký je počet parametrů nutných k určení pozice<br />

bodu, který přísluší danému objektu. Například úsečka, přímka či jiná křivka (parabola<br />

nebo sinusová křivka apod.) má dimenzi rovnu 1.<br />

Reálný svět si však s geometricky hladkými útvary nevystačí, protože například<br />

kameny nebo mraky nejsou koule, hory nejsou kužely apod.<br />

17


KAPITOLA 2. FRAKTÁLY<br />

Problém může nastat i při měření délky pobřeží [02] (což je křivka<br />

s topologickou dimenzí rovnou jedné): při zmenšování měřítka se naměřená hodnota<br />

postupně stává nekonečně velkou (při zmenšení měřítka jsou vidět i detaily pobřeží,<br />

které nebyly například na mapě s větším měřítkem viditelné). Pobřeží tedy v rovině<br />

zabírá více místa než hladká křivka. Nezabírá však všechno místo, protože nevyplňuje<br />

celou rovinu. Jeho „skutečná“ dimenze je tedy větší než topologická dimenze křivky (ta<br />

je rovna jedné) a zároveň je menší než topologická dimenze roviny (ta je rovna dvěma).<br />

Toto necelé číslo se nazývá fraktální, Hausdorffova, případně Hausdorffova-<br />

Besicovicova dimenze (viz [02]).<br />

Hodnota fraktální dimenze udává, s jakou rychlostí při zmenšování měřítka roste<br />

do nekonečna například délka fraktálních útvarů. Jestliže se Hausdorffova dimenze a<br />

topologická dimenze budou lišit velmi málo, bude takový objekt málo členitý a naopak.<br />

2.3 Dělení fraktálů<br />

Fraktály lze rozdělit [07] do několika skupin, přičemž fraktály ze stejné skupiny<br />

mají shodné své nejvýznamnější charakteristiky. Mezi základní skupiny fraktálů patří:<br />

4.<br />

• L-systémy<br />

• Systémy iterovaných funkcí<br />

• Dynamické systémy s fraktální strukturou<br />

• Náhodné fraktály<br />

L-systémy a Systémy iterovaných funkcí se budou podrobně zabývat kapitoly 3 a<br />

Dynamickými systémy se označují (viz [06]) matematické modely, které jsou<br />

závislé na nějaké proměnné (nejčastěji to bývá na čase). Systém je většinou popsán<br />

soustavou diferenciálních rovnic a může nabývat různých stavů. Přitom u některých<br />

dynamických systémů tento stavový prostor tvoří fraktál (dynamické systémy s fraktální<br />

strukturou). Většinou je nelze použít pro zkoumání přírodních objektů, protože vytváří<br />

sice abstraktní, zato často fascinující obrazce. Mezi nejznámější představitele<br />

dynamických systémů patří Mandelbrotova množina (obr. 4, převzato z [06]) a Juliovy<br />

množiny.<br />

18


KAPITOLA 2. FRAKTÁLY<br />

Obr. 4 Mandelbrotova množina.<br />

Náhodné fraktály (viz [06]) umožňují nejreálnější popis přírodních objektů.<br />

Zatímco při generování například stromu klasickým L-systémem nebo systémem<br />

iterovaných funkcí získáme strom symetrický případně „do jisté míry“ symetrický (viz<br />

kapitola 2.2.2 Soběpodobnost a soběpříbuznost), skutečný strom v přírodě vypadá<br />

poněkud odlišně: má nepravidelné délky a tloušťky větví, úhel růstu větví je různý,<br />

strom rostoucí v lese bude mít jiný tvar než tentýž druh stromu rostoucí osamoceně<br />

apod. Náhodné fraktály mohou být vytvářeny např. pomocí:<br />

- Brownova pohybu: bod se náhodně přesouvá v rovině nebo v prostoru a zanechává<br />

za sebou stopu. Tato metoda se používá například při generování toků řek.<br />

- Metody přesouvání středního bodu: často se používá v počítačové grafice<br />

k vygenerování a následné vizualizaci přírodní krajiny.<br />

2.4 Využití fraktálů<br />

Fraktály nalezly uplatnění (viz [06]) v nejrůznějších oblastech. Mohou být využity<br />

ve fyzice, biologii nebo medicíně. Například při zkoumání vlastností krve se měří<br />

Hausdorffova dimenze. Dále se například zkoumá, zda má nějakou souvislost<br />

Hausdorffova dimenze povrchu mozku a inteligence člověka či jeho paměťové<br />

schopnosti (povrch mozku je tvořen mozkovými závity, které svým počtem a členitostí<br />

určují různé schopnosti mozku, například paměť či inteligenci).<br />

19


KAPITOLA 2. FRAKTÁLY<br />

Další uplatnění fraktálů je v počítačové grafice, například při modelování<br />

přírodních útvarů (jako jsou stromy, rostliny, mraky, hory, kameny apod.) nebo při<br />

generování textur, kde je výhodou fraktálů jejich paměťová nenáročnost. Ta je využita i<br />

při fraktálové kompresi.<br />

Oblastí využití fraktálů je také výtvarné umění (obr. 5, převzato z [07]).<br />

Obr. 5 Juliova množina v hyperkomplexním prostoru.<br />

Je vhodné poznamenat, že pro vytvoření celého fraktálu je zapotřebí nekonečné<br />

množství iterací, které tedy budou spočítány v nekonečném čase. V praktických<br />

realizacích se proto provádí pouze konečný počet iterací, jejichž výsledkem je pouze<br />

přibližný tvar fraktálu (viz [06]).<br />

20


3 L – SYSTÉMY<br />

Začátek této kapitoly obecně pojednává o L-systémech a vysvětluje některé<br />

základní pojmy týkající se L-systémů. Další část je věnovaná popisům a konstrukcím<br />

některých známých fraktálů vytvořených pomocí deterministických L-systémů.<br />

Kapitolu uzavírají stochastické L-systémy.<br />

3.1 Úvod do L-systémů<br />

L-systémy neboli Lindenmayerovy systémy získaly svůj název podle maďarského<br />

biologa Aristida Lindenmayera, který v 60. letech minulého století rozvinul formální<br />

popis vývoje biologických systémů určený pro simulace na počítačích. Základní<br />

myšlenka spočívala v tom, že na vývoj organismu může být nahlíženo jako na<br />

vykonávání určitého programu, který je uložen v oplodněném vajíčku (viz [02]).<br />

L-systémy generují řetězce znaků, které jsou v jednotlivých iteračních krocích<br />

přepisovány podle určitých přepisovacích pravidel. Každému symbolu v řetězci je<br />

přiřazen jistý geometrický význam jako například posun vpřed o zadanou délku, otočení<br />

o určitý úhel apod.<br />

L-systém bývá označovaný [01] jako bezkontextový L-systém (neboli 0L-systém),<br />

jestliže je výběr použitelného pravidla závislý pouze na právě nahrazovaném symbolu a<br />

nikoliv na jeho kontextu (tedy na symbolech před a za ním). Některé simulace (např.<br />

šíření různých látek v těle rostlin) vyžadují vzít v úvahu právě naznačené kontexty.<br />

Bezkontextový L-systém je tvořen:<br />

• výchozím řetězcem (axiomem)<br />

• množinou přepisovacích pravidel<br />

• množinou symbolů, které se mohou vyskytovat v řetězci (tzv. abecedou)<br />

Tato trojice se také nazývá gramatika L-systému (viz [07]). Výchozí řetězec je tvořen<br />

neprázdným slovem (slovo je řetězec symbolů). Přepisovací pravidlo určuje, jaký<br />

symbol bude nahrazen jakým slovem a abeceda je tvořena terminálními a<br />

neterminálními symboly. Neterminální symbol je takový, který může být přepsán,<br />

naopak terminální být přepsán nemůže.<br />

L-systémy mohou být rozděleny na deterministické a stochastické (viz [01]).<br />

Deterministický L-systém je takový, ve kterém je každému neterminálnímu symbolu<br />

přiřazeno pouze jedno přepisovací pravidlo. Deterministický L-systém generuje při<br />

stejném počtu opakování (iterací) vždy stejný obrazec, protože výsledný řetězec je<br />

pokaždé stejný. U stochastických L-systémů tomu tak není, protože jednotlivým<br />

21


KAPITOLA 3. L-SYSTÉMY<br />

neterminálním symbolům může být přiřazeno více přepisovacích pravidel (existuje více<br />

pravidel pro náhradu jednoho symbolu).<br />

Pomocí L-systémů mohou být generovány fraktály, které se podobají rostlinám,<br />

stromům a dalším přírodním útvarům. L-systémy jsou také využívány<br />

v geologii, biologii a dalších přírodních vědách.<br />

3.2 Želví grafika<br />

L-systémy generují řetězce znaků. Pro geometrickou interpretaci takto<br />

vytvořených řetězců se používá tzv. želví grafika (viz např. [01], [07]), která je známá<br />

z programovacího jazyka LOGO, ve kterém se pomocí jednoduchých příkazů daly<br />

pomocí želvy kreslit různé obrazce. Jednotlivé symboly řetězce se chápou jako příkazy<br />

pro řízení pohybu želvy. Želva sekvenčně čte vygenerovaný řetězec a jednotlivé<br />

symboly interpretuje jako příkazy (posun vpřed o zadanou délku apod.).<br />

Mezi základní příkazy patří:<br />

• F = posun želvy vpřed o zadanou délku, želva za sebou zanechává stopu ve<br />

formě úsečky<br />

• f = posun želvy vpřed o zadanou délku bez zanechání stopy<br />

• + = želva se na místě otočí doleva o zadaný úhel α<br />

• - = želva se na místě otočí doprava o zadaný úhel α<br />

• | = želva změní svůj směr na opačný<br />

Dalšími příkazy mohou být příkazy pro zapamatování pozice a orientace želvy apod.<br />

3.3 Fraktály vytvořené pomocí deterministických L-systémů<br />

3.3.1 Kochova křivka a Kochova vločka<br />

Niels Fabian Helge von Koch byl švédský matematik, který v roce 1904<br />

představil křivku, která po něm nese jméno. Vytváření Kochovy křivky (viz [07])<br />

spočívá v provedení následujících kroků:<br />

1. nejprve je zadán počáteční řetězec v podobě úsečky zadané délky.<br />

2. úsečka je rozdělena na třetiny, prostřední úsečka se vyjme a nahradí se rameny<br />

rovnoramenného trojúhelníku. Z původní úsečky tedy vznikne obrazec, který<br />

představuje lomená úsečka, jejíž délka je rovna 3<br />

4 délky původní úsečky (lomenou<br />

úsečku tvoří 4 úsečky, každá s délkou, která je rovna 3<br />

1 délky původní úsečky).<br />

22


KAPITOLA 3. L-SYSTÉMY<br />

3. na vzniklý obrazec se opakovaně aplikuje pravidlo uvedené v předchozím bodě.<br />

Pro zobrazení Kochovy křivky v programu Matlab jsou využity 3 symboly: F, +,<br />

-. Geometrická interpretace těchto symbolů je uvedena v kapitole 3.2 Želví grafika.<br />

Přepisovací pravidlo uvedené v bodě 2. má pak následující podobu:<br />

F → F + F − −F<br />

+ F (symbol nacházející se vlevo od matematického symbolu „ → “ je<br />

nahrazen řetězcem symbolů, které se od „→ “ nachází vpravo) a úhel α = 60°<br />

. Pomocí<br />

Matlabu je nejdříve vytvořen (vypočten) řetězec, který je poté opět s využitím programu<br />

Matlab vykreslen. Několik prvních iterací takto vytvořené Kochovy křivky je zobrazeno<br />

na obr. 6.<br />

Obr. 6 Prvních 6 iterací Kochovy křivky.<br />

Při výpočtu fraktální dimenze Kochovy křivky (viz [02]) se vyjde ze<br />

skutečnosti, že při každé iteraci se délka každé hrany zmenší na 3<br />

1 své původní hodnoty<br />

a počet soběpodobných úseků vzroste čtyřikrát (neboli při trojnásobném zjemnění se<br />

délka Kochovy křivky zvětší čtyřikrát). Fraktální (Hausdorffova) dimenze Kochovy<br />

křivky se získá ze vztahu:<br />

log N<br />

D H<br />

= , (1)<br />

1<br />

log<br />

ε<br />

1<br />

kde N označuje faktor změny délky a faktor změny měřítka. Po dosazení N = 4 a<br />

ε<br />

1<br />

ε = má fraktální dimenze Kochovy křivky po zaokrouhlení hodnotu: D<br />

H= 1, 262 .<br />

3<br />

Kochova vločka je vytvořena stejným způsobem jako Kochova křivka, změna<br />

nastává pouze v počátečním řetězci, který tvoří trojúhelník a který je pro potřeby želví<br />

grafiky zapsán následovně: F − −F<br />

− −F<br />

. Na obr. 7 je znázorněno několik prvních<br />

iterací Kochovy vločky.<br />

23


KAPITOLA 3. L-SYSTÉMY<br />

Obr. 7 Prvních 6 iterací Kochovy vločky.<br />

3.3.2 Sierpinského trojúhelník<br />

Autorem dalšího klasického fraktálu je polský matematik Waclaw Franciszek<br />

Sierpinski, který jej publikoval v roce 1916. Při konstrukci Kochovy křivky a vločky<br />

bylo použito pouze jedno přepisovací pravidlo, u Sierpinského trojúhelníku (viz [01]) to<br />

jsou již přepisovací pravidla dvě. Počátečním řetězcem (axiomem) je obvykle<br />

rovnoramenný trojúhelník ( axiom = FGF + + FF + + FF ). Symbol G představuje<br />

pomocný, tzv. negrafický prvek, který želví grafika jednoduše ignoruje. Sierpinského<br />

trojúhelník vzniká odstraněním trojúhelníku s vrcholy ve středech stran původního<br />

trojúhelníku. V dalších iteracích se odstraňují analogicky středy zůstávajících<br />

trojúhelníků. α = 60°<br />

a přepisovací pravidla mají následující podobu: F → FF ,<br />

G → + + FGF − −FGF<br />

− −FGF<br />

+ + . Popsaná konstrukce je patrná z prvních iterací<br />

Sierpinského trojúhelníku, které jsou zobrazeny na obr. 8.<br />

1<br />

V první iteraci se získá N = 3 pokrývacích útvarů s měřítkem ε = (jeden<br />

2<br />

trojúhelník je nahrazen třemi trojúhelníky s poloviční délkou stran). Ve druhé iteraci<br />

1 1 1<br />

n<br />

pak N = 3 × 3 = 9 útvarů s měřítkem ε = × = . Tedy obecně v n -té iteraci N=<br />

3<br />

2 2 4<br />

a ε<br />

⎛ 1 ⎞<br />

= ⎜ ⎟<br />

⎝ 2 ⎠<br />

n<br />

. Fraktální dimenze Sierpinského trojúhelníku (viz [02]) je pak:<br />

D<br />

H<br />

log N<br />

= lim<br />

ε →0<br />

1<br />

log<br />

ε<br />

log 3<br />

= lim<br />

n→∞<br />

log 2<br />

n<br />

n<br />

nlog 3<br />

= lim =<br />

n→∞<br />

n log 2<br />

log3<br />

log 2<br />

= 1,585<br />

(2)<br />

24


KAPITOLA 3. L-SYSTÉMY<br />

Obr. 8 Prvních 6 iterací Sierpinského trojúhelníku.<br />

3.3.3 Hilbertova, Peano-Gosperova a dračí křivka<br />

Dalšími známými fraktály, které lze vytvořit pomocí L-systémů, jsou Hilbertova<br />

křivka [07] a Peano-Gosperova křivka [14], které jsou zajímavé především tím, že<br />

zatímco jejich topologická dimenze je rovna jedné, hodnota jejich fraktální dimenze je<br />

rovna dvěma, tedy i když jsou vytvořeny pomocí na sebe navazujících úseček, vyplňují<br />

současně celou plochu. Gramatiky těchto dvou křivek lze nalézt v příloze této<br />

bakalářské práce. Jsou zobrazeny na obr. 9, Hilbertova křivka po 6. iteraci a Peano-<br />

Gosperova křivka po 4. iteraci.<br />

Obr. 9 Hilbertova a Peano-Gosperova křivka.<br />

25


KAPITOLA 3. L-SYSTÉMY<br />

Tzv. dračí křivka [07] (obr. 10) je dalším příkladem fraktálního objektu, který je<br />

vytvořen pomocí L-systémů a má také fraktální dimenzi rovnu dvěma. Její počáteční<br />

řetězec tvoří úsečka, která je v prvním iteračním kroku ohnuta o pravý úhel doleva, tedy<br />

vzniknou dvě úsečky navzájem svírající úhel 90 ° . Ve druhém iteračním kroku jsou tyto<br />

dvě úsečky opět ohnuty: první o pravý úhel doleva, druhá o pravý úhel doprava.<br />

Výsledkem pak je čtveřice úseček, které tvoří lomenou čáru. V dalších iteracích probíhá<br />

ohyb úseček podle stejného principu. Gramatika dračí křivky je k nalezení v příloze této<br />

práce.<br />

Obr. 10 Dračí křivka po 16 iteracích.<br />

3.3.4 Použití zásobníku pro větvící se struktury<br />

Všechny předchozí fraktály vyobrazené na obr. 6 až 10 mají mimo jiné<br />

společnou tu vlastnost, že byly vytvořeny jedním tahem (nepřerušovaným pohybem<br />

želvy), tedy netvořily a ani nemohly tvořit rozvětvující se struktury. To je zapříčiněno<br />

tím, že želva, která fraktály na základě vytvořeného řetězce vykreslovala, neměla<br />

k dispozici žádnou paměť, do které by si ukládala svůj předchozí stav (stavy), tedy svou<br />

pozici a orientaci. Pro strukturu rostlin jsou ale typická větvení, tedy želva se musí vrátit<br />

po nakreslení jedné větve bez nakreslení čáry. Pro takovýto posun bez zanechání stopy<br />

bývá definován symbol f . Větvení rostlin ale mají obvykle rekurzivní charakter a pro<br />

tento účel se hodí použití zásobníku (viz [01]). Do něj se v místě větvení uloží stav či<br />

více stavů želvy. Při vybrání ze zásobníku se želva vrátí na zapamatované místo a<br />

obnoví přitom i svoji orientaci. Obvykle se pro operace vkládání do zásobníku a výběr<br />

ze zásobníku používají otvírací a zavírací hranaté závorky. Ty nebyly vybrány náhodně,<br />

protože mezi znaky [ a ] jsou vkládány relativně samostatné sekvence příkazů, které ve<br />

výsledku neovlivní stav želvy (želva se po interpretaci řetězce uloženého mezi těmito<br />

závorkami vrátí zpět do původní pozice). L-systémy rozšířené o výše uvedenou dvojici<br />

terminálních symbolů bývají označovány jako závorkové L-systémy (viz [07]).<br />

26


KAPITOLA 3. L-SYSTÉMY<br />

Jednoduchá virtuální rostlina generovaná L-systémem s přepisovacím pravidlem<br />

ve tvaru F → FF + [ + F − F − F]<br />

− [ −F<br />

+ F + F]<br />

(viz [01]), počátečním řetězcem<br />

+ +++F a úhlem α = 22, 5°<br />

je zobrazena na obr. 11.<br />

Obr. 11 Rostlina po 4 iteracích.<br />

Nejrůznějších rostlin může být pomocí L-systémů vygenerováno libovolně velké<br />

množství. Na ukázku jsou na obr. 12 znázorněny 2 rostliny, na kterých je zajímavé to,<br />

že jejich přepisovací pravidlo se od přepisovacího pravidla rostliny zobrazené na obr.<br />

11 liší pouze v jediném znaku. Rostlina umístěná vlevo na obr. 12 má přepisovací<br />

pravidlo ve tvaru:<br />

F → FF + [ + F − F − F]<br />

−[<br />

−F<br />

+ F − F]<br />

, rostlina umístěná vpravo:<br />

F → FF + [ + F − F − F]<br />

−[<br />

−F<br />

− F + F]<br />

.<br />

27


KAPITOLA 3. L-SYSTÉMY<br />

Obr. 12 2 rostliny po 4 iteracích.<br />

Na obr. 13 jsou další dvě rostliny vytvořené L-systémem, které mají stejný<br />

počáteční řetězec + + + + G , také stejné přepisovací pravidlo F → FF i stejný úhel<br />

α = 22, 5° . Liší se nepatrně pouze ve druhém přepisovacím pravidle (viz [05]), přesto<br />

tyto rostliny vypadají vzájemně značně odlišně. Rostlina vlevo má toto pravidlo ve<br />

tvaru: G → F[ + G][<br />

−G]<br />

FG , rostlina vpravo: G → F[ + G]<br />

F[<br />

−G]<br />

+ G .<br />

Obr. 13 2 rostliny po 7 iteracích.<br />

28


KAPITOLA 3. L-SYSTÉMY<br />

3.4 Stochastické L-systémy<br />

Všechny doposud uvedené příklady L-systémů byly vytvořeny deterministicky,<br />

tedy tak, kdy při stejném počtu iterací je daný L-systém vygenerován vždy stejně.<br />

Pokud by byly tímto způsobem vytvářeny i přírodní objekty jako jsou stromy a keře,<br />

bude patrné, že se od skutečných přírodních objektů liší. To je způsobeno tím, že reálné<br />

přírodní objekty nejsou zcela pravidelné, ale obsahují jisté náhodné prvky (které však<br />

nemění celkový geometrický ani topologický tvar objektu). Z tohoto důvodu se pro<br />

lepší simulaci reality používají tzv. stochastické L-systémy (viz [01] a [07]), kde na<br />

rozdíl od deterministických L-systémů existuje více přepisovacích pravidel pro náhradu<br />

jednoho symbolu.<br />

Na obr. 14 jsou zobrazeny 4 rostliny, které byly vytvořeny pomocí totožného<br />

stochastického L-systému, jehož výpočet byl 4x proveden v programu Matlab a jak je<br />

z obrázku patrné, pokaždé se vykreslila jiná rostlina. Gramatika tohoto L-systému se<br />

třemi přepisovacími pravidly pro jeden symbol je opět k nalezení v příloze této práce.<br />

Obr. 14 Stochastické rostliny.<br />

Výsledná podoba stochastického L-systému může být ovlivněna nejen náhodou,<br />

ale i prioritami, které jsou přiřazeny jednotlivým přepisovacím pravidlům, které slouží k<br />

nahrazování stejného symbolu. V předchozím příkladu, kde byl jeden symbol<br />

nahrazován pomocí trojice přepisovacích pravidel, byla každému z těchto pravidel<br />

přiřazena hodnota pravděpodobnosti výběru 3<br />

1 . Pokud se u tohoto L-systému tyto<br />

1 1 1<br />

pravděpodobnosti změní na hodnoty , a , dojde k jistým odlišnostem<br />

2 3 6<br />

v charakteru vykreslované rostliny, které jsou patrné z obr. 15.<br />

29


KAPITOLA 3. L-SYSTÉMY<br />

Obr. 15 Stochastické rostliny 2.<br />

30


4 SYSTÉMY ITEROVANÝCH FUNKCÍ<br />

V této kapitole jsou nejprve podány základní informace o systémech iterovaných<br />

funkcí a afinních transformacích, které s IFS úzce souvisí. Dále je popsána jedna<br />

z metod, jakou lze fraktály konstruované pomocí IFS generovat a závěr kapitoly se<br />

věnuje konkrétním ukázkám fraktálů, které lze pomocí IFS vytvořit.<br />

4.1 Úvod do systémů iterovaných funkcí<br />

Systémy iterovaných funkcí bývají často označovány zkratkou IFS z anglického<br />

Iterated Function Systems (viz [07]). První publikace týkající se systémů iterovaných<br />

funkcí se objevují v 80. letech minulého století. Známá je například publikace s názvem<br />

Fractals Everywhere autora Michaela Barnsleyho vydaná v roce 1988.<br />

Systémy iterovaných funkcí generují fraktály pomocí afinních transformací (viz<br />

[07]). Afinní transformace jsou lineární, to znamená, že například při aplikaci takové<br />

transformace na úsečku, resp. množinu bodů ležících na přímce, bude výsledkem<br />

transformace rovněž úsečka (resp. množina bodů ležící na přímce). Afinní transformace<br />

provádí s daným objektem několik operací, jako jsou translace, rotace, změna měřítka<br />

apod. Jinak řečeno, afinní transformace vzniká složením několika lineárních<br />

transformací. V některých případech se však používají i transformace nelineární (ohyb,<br />

zkrut, zborcení apod.). K vybudování fraktálního objektu obvykle nestačí jen jedna<br />

afinní transformace, ale je jich potřeba několik.<br />

Systém iterovaných funkcí je tvořen množinou afinních transformací a k nim<br />

přiřazenými pravděpodobnostmi. Větší pravděpodobnost je přiřazena těm afinním<br />

transformacím, které mají větší míru kontrakce (pojem kontrakce bude vysvětlen<br />

v kapitole 4.2.1 Afinní transformace).<br />

IFS je generativní metoda vytváření fraktálů, která se řadí mezi deterministické.<br />

Algoritmus pro generování IFS fraktálů však může být jak deterministický, tak<br />

nedeterministický [06].<br />

IFS mohou být využity (viz [06]) při generování textur, např. v počítačových<br />

hrách. Metoda IFS se ukázala také výhodná pro kompresi dat, jelikož jedna<br />

transformace je v tomto případě zapsána pouze pomocí osmi čísel (šest čísel na zapsání<br />

transformace a dvě čísla na změnu kontrastu a jasu). Metodu IFS využívá mimo jiné i<br />

grafický formát FIF. Další možnosti využití, kde lze systémy iterovaných funkcí použít<br />

v počítačové grafice, jsou tvorby například stromů, rostlin apod. s následnou možností<br />

jejich vizualizace nebo animace.<br />

31


KAPITOLA 4. SYSTÉMY ITEROVANÝCH FUNKCÍ<br />

4.2 Teorie systémů iterovaných funkcí<br />

4.2.1 Afinní transformace<br />

Afinní transformaci lze vyjádřit (viz [06]) vztahem:<br />

w ( X ) = AX+<br />

B , (3)<br />

kde A je transformační matice a B je vektor posunu. Koeficienty matice A se<br />

uplatňují při rotaci, zkosení a změně měřítka. Koeficienty matice B při translaci<br />

(posunutí). Vztah (3) může být zapsán [06] ve tvaru:<br />

kde x<br />

i<br />

a y<br />

i<br />

jsou souřadnice iterovaného bodu.<br />

⎛ x2<br />

⎞ ⎛ a11<br />

a12<br />

⎞ ⎛ ⎞ ⎛ ⎞<br />

× x1<br />

b1<br />

w ⎜<br />

⎟ =<br />

⎜ ⎟<br />

⎜<br />

⎟ +<br />

⎜<br />

⎟ , (4)<br />

⎝ y2<br />

⎠ ⎝a21<br />

a22<br />

⎠ ⎝ y1<br />

⎠ ⎝b2<br />

⎠<br />

Transformační matici A a vektor posunu B lze sloučit (viz [07]) do jediné<br />

matice transformace M , jejíž velikost se však zvětší. Půjde o matici s 3× 3 prvky (v<br />

prostoru by se jednalo o matici s 4× 4 prvky). Získá se vztah:<br />

⎛ x2<br />

⎞ ⎛ a<br />

⎜ ⎟ ⎜<br />

⎜ y2<br />

⎟ = ⎜a<br />

⎜ ⎟ ⎜<br />

⎝ 1 ⎠ ⎝ 0<br />

11<br />

21<br />

a<br />

a<br />

12<br />

22<br />

0<br />

b1<br />

⎞ ⎛ x1<br />

⎞<br />

⎟ ⎜ ⎟<br />

b2<br />

⎟ × ⎜ y1<br />

⎟<br />

1 ⎟ ⎜ ⎟<br />

⎠ ⎝ 1 ⎠<br />

(5)<br />

Poslední řádek matice M obsahuje hodnoty [0,0,1], tj. v operační paměti je při<br />

praktické implementaci nutné ukládat o jeden řádek číselných hodnot méně, což je<br />

užitečné jak z hlediska paměťových nároků (zejména při fraktální kompresi), tak i kvůli<br />

redukci počtu aritmetických operací násobení a sčítání. Prakticky to znamená, že<br />

v rovině je transformace popsána pomocí šesti číselných hodnot a v prostoru pomocí<br />

čísel dvanácti.<br />

V literatuře bývá vztah (4) často zapisován v podobě:<br />

⎛ x<br />

w<br />

⎜<br />

⎝ y<br />

2<br />

2<br />

⎞ ⎛a<br />

⎟ =<br />

⎜<br />

⎠ ⎝ c<br />

b ⎞ ⎛<br />

× x<br />

⎟<br />

⎜<br />

d ⎠ ⎝ y<br />

1<br />

1<br />

⎞ ⎛ e ⎞<br />

⎟ +<br />

⎜<br />

⎟<br />

⎠ ⎝ f ⎠<br />

(6)<br />

Afinní transformace musí splňovat následující podmínku: musí být kontrakcemi<br />

(viz [07]). To znamená, že po aplikaci transformace na libovolné dva body, bude nová<br />

vzdálenost bodů menší než původní vzdálenost bodů. Tato vlastnost mimo jiné<br />

zaručuje, že atraktorem množiny IFS nikdy nebude nekonečno. Pojmem atraktor se<br />

označuje konečný stav systému.<br />

32


KAPITOLA 4. SYSTÉMY ITEROVANÝCH FUNKCÍ<br />

4.2.2 Algoritmus náhodné procházky<br />

Pro generování IFS koláží existují různé metody, mezi které patří i algoritmus<br />

náhodné procházky [06] (neboli RWA z angl. Random Walk Algorithm). Jeho výhodou<br />

je jednoduchost a malá paměťová náročnost. Jeho nevýhodou je, že některé části<br />

fraktálu se generují vícekrát, zatímco některé jen jednou, a proto bývá pomalejší<br />

(náročnější na čas).<br />

Generování IFS fraktálu začíná tak, že je zvolen náhodný bod v rovině,<br />

nejčastěji bod [0,0]. Poloha tohoto bodu neovlivní konečný výsledek, protože<br />

kontrahující afinní transformace zajišťují směřování systému do svého atraktoru.<br />

Protože ale tento startovací bod nemusí nezbytně ležet v atraktoru IFS, je vhodné<br />

několik prvních iterací nezobrazovat, protože do atraktoru se systém může dostat až po<br />

několika iteracích.<br />

Afinní transformace IFS, která se bude poté na tento bod aplikovat, bude vybrána<br />

náhodně, nicméně je při tomto výběru nutné zohlednit pravděpodobnosti jednotlivých<br />

afinních transformací. Jinak řečeno, afinní transformace se vybírají náhodně<br />

s pravděpodobností p . Takto se pokračuje až do dosažení zvoleného počtu iterací.<br />

Takováto konstrukce fraktálů pomocí systémů iterovaných funkcí a náhodných<br />

procesů je nazývána hra chaosu [01] (z angl. chaos game).<br />

Právě pomocí algoritmu náhodné procházky budou generovány fraktály uvedené<br />

v následující kapitole.<br />

4.3 Fraktály vytvořené pomocí IFS<br />

4.3.1 Kochova křivka<br />

Kochova křivka, o které byla již řeč v kapitole 3.3.1 Kochova křivka a Kochova<br />

vločka, je pomocí IFS vytvářena čtyřmi afinními transformacemi. Tyto afinní<br />

transformace mají následující podobu (viz [10]):<br />

a b c d e f p<br />

1/3 0 0 1/3 0 0 1/4<br />

× cos( / 3) − 1/<br />

3×<br />

sin( π / 3)<br />

1/<br />

3× sin( π / 3)<br />

1/<br />

3× cos( π / 3)<br />

1/3 0 1/4<br />

× cos( / 3) 1/<br />

3× sin( π / 3)<br />

− 1/<br />

3×<br />

sin( π / 3)<br />

1/<br />

3× cos( π / 3)<br />

1/2 3 / 6 1/4<br />

1/3 0 0 1/3 2/3 0 1/4<br />

1/<br />

3 π<br />

1/<br />

3 π<br />

Parametry a , b,<br />

c,<br />

d,<br />

e,<br />

f představují koeficienty afinní transformace popsané vztahem<br />

(6), parametr p je pravděpodobnost přiřazená afinní transformaci.<br />

Obr. 16 zobrazuje 3 Kochovy křivky vytvořené pomocí 100, 1000 a 10 000<br />

iterací, tedy jsou tvořeny 100, 1000 a 10 000 body. Jak bylo uvedeno v kapitole 4.2.2 s<br />

33


KAPITOLA 4. SYSTÉMY ITEROVANÝCH FUNKCÍ<br />

názvem Algoritmus náhodné procházky: startovací bod nemusí nezbytně ležet<br />

v atraktoru IFS (viz [06]). A proto je v tomto příkladě (a také ve všech dalších<br />

příkladech této kapitoly) několik prvních iterací nezobrazeno. Dále v této kapitole bylo<br />

zmíněno také to, že některé body se mohou vygenerovat vícekrát, neboli může být<br />

vytvořeno více bodů, které budou mít stejné souřadnice. Proto i když je fraktál vytvořen<br />

pomocí například 1000 iterací, nemusí být „vidět“ všech 1000 bodů, ale o něco méně.<br />

Obr. 16 Kochovy křivky tvořené zleva 100, 1000 a 10 000 body.<br />

4.3.2 Sierpinského trojúhelník<br />

Podobně jako Kochova křivka může být i Sierpinského trojúhelník (obr. 17)<br />

vytvořen pomocí IFS, a to konkrétně pomocí těchto tří afinních transformací (viz např.<br />

[02]):<br />

a b c d e f p<br />

0,5 0 0 0,5 0,25 0 1/3<br />

0,5 0 0 0,5 0 0,5 1/3<br />

0,5 0 0 0,5 0,5 0,5 1/3<br />

Obr. 17 Sierpinského trojúhelníky tvořené zleva 1000, 10 000, 100 000 body.<br />

Drobnými úpravami v afinních transformacích lze získat Sierpinského<br />

trojúhelníky jiných tvarů. Na obr. 18 Sierpinského trojúhelníky vlevo a uprostřed<br />

vznikly jedinou změnou v afinních transformacích Sierpinského trojúhelníku z obr. 17.<br />

Parametr v 1. afinní transformaci je změněn z hodnoty e = 0. 25 na hodnotu e = 0 , resp.<br />

e = 0.5 . Sierpinského trojúhelník vpravo na obr. 18 je vytvořen těmito afinními<br />

transformacemi (viz [12]):<br />

34


KAPITOLA 4. SYSTÉMY ITEROVANÝCH FUNKCÍ<br />

a b c d e f p<br />

0,5 0 0 0,5 0 0 1/3<br />

0,5 0 0 0,5 1 0 1/3<br />

0,5 0 0 0,5 0,5 3 / 2 1/3<br />

Obr. 18 Sierpinského trojúhelníky tvořené 200 000 body.<br />

4.3.3 Barnsleyovo kapradí<br />

Tzv. Barnsleyovo kapradí je vytvářeno pomocí čtyř afinních transformací (viz<br />

např. [01]):<br />

a b c d e f p<br />

0 0 0 0,16 0 0 0,01<br />

0,2 -0,26 0,23 0,22 0 1,6 0,07<br />

-0,15 0,28 0,26 0,24 0 0,44 0,07<br />

0,85 0,04 -0,04 0,85 0 1,6 0,85<br />

Na obr. 19 jsou dvě Barnsleyova kapradí, která se obě skládají z 50 000 bodů,<br />

přesto vypadají výrazně odlišně. V kapitole 4.2.2 Alogoritmus náhodné procházky bylo<br />

řečeno, že při jednotlivých iteracích je sice afinní transformace vybírána náhodně,<br />

přesto je potřeba při tomto výběru zohlednit pravděpodobnosti p příslušející<br />

jednotlivým afinním transformacím. U kapradí, které je umístěno v levé části obr. 19,<br />

byly tyto pravděpodobnosti výběru příslušející Barnsleyovu kapradí dodrženy, ale u<br />

kapradí, které se na tomto obrázku nachází v pravé části, byly jednotlivé afinní<br />

transformace vybírány náhodně s pravděpodobností p = 0. 25 . U kapradí vpravo je<br />

proto mnoho bodů kresleno „přes sebe“, a proto by vygenerování Barnsleyova kapradí<br />

tímto způsobem trvalo neúměrně dlouho (pokud bychom ho chtěli získat v podobě<br />

kapradí, které je na obr. 19 umístěno v levé části).<br />

35


KAPITOLA 4. SYSTÉMY ITEROVANÝCH FUNKCÍ<br />

Obr. 19 2 Barnsleyova kapradí tvořená 50 000 body.<br />

4.3.4 Sierpinského kobereček<br />

Konstrukce Sierpinského koberečku (viz [11]) vychází ze čtverce, který je<br />

rozdělen na 9 stejných čtverců. Délka strany každého z těchto 9 čtverců se rovná 3<br />

1<br />

délky strany, kterou měl původní čtverec. Prostřední čtverec se vyjme a na zbývajících<br />

8 čtverců se aplikuje stejné pravidlo.<br />

1<br />

V 1. iteraci tedy vzniká N = 8 pokrývacích útvarů s měřítkem ε = (jeden<br />

3<br />

čtverec je nahrazen osmi čtverci s třetinovou délkou stran). S využitím vztahu (1) se<br />

fraktální dimenze Sierpinského koberečku vypočítá následovně:<br />

log N log8<br />

D H<br />

= = = 1,893<br />

(7)<br />

1 log3<br />

log<br />

ε<br />

Na obr. 20 je vidět, že Sierpinského kobereček vyplňuje téměř celou plochu, a<br />

proto se jeho fraktální dimenze blíží hodnotě 2. Sierpinského kobereček je vytvořen<br />

pomocí osmi afinních transformací (viz [11]) a jejich výpis se nachází v příloze této<br />

práce.<br />

36


KAPITOLA 4. SYSTÉMY ITEROVANÝCH FUNKCÍ<br />

Obr. 20 Sierpinského kobereček tvořený 500 000 body.<br />

4.3.5 Některé další známé příklady IFS fraktálů<br />

Všechny afinní transformace, pomocí kterých jsou vytvořeny fraktály<br />

vyobrazené v této kapitole, se nachází v příloze.<br />

Obr. 21 Spirála a dračí křivka, obě tvořené 300 000 body.<br />

37


KAPITOLA 4. SYSTÉMY ITEROVANÝCH FUNKCÍ<br />

Obr. 22 Krystal a sněhová vločka tvořené 100 000 body.<br />

Dva stromy na obr. 23 jsou vytvořeny pomocí pěti stejných afinních<br />

transformací (viz [02]), liší se pouze v pravděpodobnostech výběru těchto pravidel (viz<br />

příloha). Strom umístěný na obr. 23 vlevo je tvořen 50 000 body, strom umístěný na<br />

tomto obrázku v pravé části je tvořen 100 000 body.<br />

Obr. 23 2 stromy.<br />

38


5 REALIZACE FRAKTÁLŮ V PROSTŘEDÍ MATLAB<br />

V této kapitole je nejprve obecně popsán zvolený postup při praktické realizaci<br />

fraktálů v prostředí Matlab. Další části se zabývají konkrétní realizací L-systémů a IFS<br />

fraktálů.<br />

5.1 Schéma realizace<br />

Při praktické realizaci dvou tříd fraktálů, kterými se zabývaly kapitoly 3 a 4, se<br />

postupovalo podle schématu, které je znázorněné na obr. 24. Slovní popis tohoto<br />

schématu je uveden v následujících odstavcích.<br />

soubor.m<br />

export dat<br />

vygenerovaného<br />

fraktálu<br />

*.txt/*.pov<br />

POV-Ray<br />

Obr. 24 Schéma realizace.<br />

Nejdříve se vytvořil „soubor.m“ (neboli m-soubor, m-file), tedy soubor<br />

s příponou .m. Jedná se o textový soubor, který obsahuje posloupnost příkazů a povelů<br />

pro program Matlab, které se po spuštění tohoto souboru z prostředí Matlab provedou.<br />

Soubor.m může být script nebo funkce (viz [04]). M-soubory vytvořené v rámci této<br />

práce představují většinou funkce s jedním vstupním parametrem.<br />

Spuštění m-souboru se provede zápisem a potvrzením jména m-souboru (bez<br />

přípony) z příkazového okna Matlabu. Za jméno souboru je ještě potřeba do kulatých<br />

závorek dopsat zvolenou hodnotu vstupního parametru. To je potřeba udělat z toho<br />

důvodu, protože, jak již bylo řečeno, většina m-souborů, které jsou součástí této práce,<br />

jsou funkce s jedním vstupním parametrem. Tedy například pro spuštění m-souboru<br />

s názvem kochovakrivka.m stačí (po zvolení příslušného adresáře, v jakém se tento<br />

soubor nachází) do příkazového okna Matlabu zapsat (a poté potvrdit)<br />

39


KAPITOLA 5. REALIZACE FRAKTÁLŮ V PROSTŘEDÍ MATLAB<br />

kochovakrivka(6) a dojde k vygenerovaní a také vykreslení Kochovy křivky v tomto<br />

případě pomocí 6 iterací.<br />

Doplnění vhodných příkazů do m-souboru umožní vizualizovat Matlabem<br />

vygenerovaný fraktál i jiným způsobem než pomocí Matlabu. Vygenerovaný fraktál lze<br />

exportovat do nového textového souboru (například s názvem kochovakrivka.pov, ale<br />

mohl by mít i název kochovakrivka.txt apod.), který bude spustitelný v programu POV-<br />

Ray a který příslušnou vizualizaci provede. Tímto tématem se zabývá kapitola 6<br />

s názvem Pokročilá vizualizace.<br />

Součástí každého m-souboru, který se nachází na přiloženém médiu, je i stručný<br />

help a také okomentování jednotlivých sekvencí příkazů.<br />

5.2 Realizace L-systémů<br />

M-soubory vytvořené pro generování a zobrazení fraktálů, které vznikají pomocí<br />

L-systémů, jsou tvořeny následujícími částmi:<br />

• stručným „helpem“<br />

• definováním přepisovacího pravidla, počátečního řetězce a příslušných<br />

rozměrů (úhlu α , délky základní úsečky)<br />

• algoritmem pro výpočet řetězce<br />

• inicializací (nastavením počátečních hodnot) a příkazy pro vykreslení<br />

fraktálu z řetězce, který byl vytvořen v předchozí části<br />

• příkazy pro úpravu vzhledu grafického okna (obrázku)<br />

Takto vytvořené m-soubory, které generují fraktály pomocí L-systémů, se nachází<br />

na přiloženém médiu. Všechny obrázky uvedené v kapitole 3 L-systémy vznikly právě<br />

pomocí těchto m-souborů.<br />

Ucelený přehled tímto způsobem vytvořených fraktálů se nachází v příloze této<br />

práce. U každého fraktálu je uveden jeho název, gramatika, příslušný obrázek a graf<br />

doby výpočtu fraktálu v závislosti na počtu iterací.<br />

Tato závislost doby výpočtu na počtu iterací je nelineární (viz obr. 25). Hodnoty<br />

v jednotlivých grafech byly získány pomocí matlabovských funkcí tic a toc. Protože<br />

tyto hodnoty závisí na výkonu počítače, slouží grafy spíše ke sledování zmíněné<br />

nelinearity (případně k porovnávání časové náročnosti výpočtu mezi jednotlivými<br />

fraktály), než ke sledování naměřených absolutních hodnot. Výpočty byly prováděny na<br />

počítači s procesorem AMD Athlon XP 2600+ (1,92 GHz) a 1 GB RAM paměti.<br />

40


KAPITOLA 5. REALIZACE FRAKTÁLŮ V PROSTŘEDÍ MATLAB<br />

Kochova křivka<br />

60<br />

50<br />

Čas [s]<br />

40<br />

30<br />

20<br />

10<br />

0<br />

1 2 3 4 5 6 7 8<br />

Počet iterací<br />

Obr. 25 Graf zobrazující dobu výpočtu Kochovy křivky v závislosti na počtu iterací.<br />

5.3 Realizace IFS fraktálů<br />

M-soubory vytvořené pro generování a zobrazení fraktálů, které vznikají pomocí<br />

systémů iterovaných funkcí, jsou tvořeny následujícími částmi:<br />

• stručným „helpem“<br />

• definováním afinních transformací<br />

• algoritmem pro výpočet pozic bodů generovaného fraktálu (algoritmus při<br />

výpočtu zohledňuje pravděpodobnosti jednotlivých afinních transformací)<br />

• příkazem pro zobrazení fraktálu<br />

• příkazy pro úpravu vzhledu grafického okna (obrázku)<br />

Takto vytvořené m-soubory se nachází na přiloženém médiu. Všechny obrázky<br />

uvedené v kapitole 4 Systémy iterovaných funkcí vznikly právě pomocí těchto m-<br />

souborů.<br />

Ucelený přehled tímto způsobem vytvořených fraktálů se opět nachází v příloze<br />

této práce. U každého fraktálu je uveden jeho název, jeho afinní transformace<br />

s příslušnými pravděpodobnostmi a obrázek tohoto fraktálu. Graf doby výpočtu fraktálu<br />

v závislosti na počtu iterací není potřeba u IFS fraktálů uvádět, protože počtem iterací se<br />

v tomto případě rozumí počet bodů, které tvoří fraktál, a tedy tato závislost bude mít<br />

lineární průběh (viz obr. 26).<br />

41


KAPITOLA 5. REALIZACE FRAKTÁLŮ V PROSTŘEDÍ MATLAB<br />

25<br />

20<br />

Kochova křivka<br />

Čas [s]<br />

15<br />

10<br />

5<br />

0<br />

0 200000 400000 600000 800000 1000000 1200000<br />

Počet bodů<br />

Obr. 26 Graf zobrazující dobu výpočtu Kochovy křivky v závislosti na počtu iterací.<br />

Body, pomocí kterých je IFS fraktál zobrazován, mohou mít různou velikost.<br />

Z obr. 27 je patrné, že menší body umožňují detailnější zobrazení fraktálu, jeho výpočet<br />

pak ale bude probíhat delší bodu. To je způsobeno tím, že pro zobrazení fraktálu<br />

s menšími body je potřeba vykreslit více bodů, aby bylo dosaženo stejné „hustoty“<br />

(vyplnění plochy), jaké dosahuje fraktál s většími vykreslovanými body. Kapradí na<br />

obr. 27 umístěné vlevo je tvořeno 50 000 body, kapradí umístěné ve střední části tohoto<br />

obrázku je tvořeno menšími body, kterých je 500 000.<br />

Obr. 27 3 Barnsleyova kapradí.<br />

42


KAPITOLA 5. REALIZACE FRAKTÁLŮ V PROSTŘEDÍ MATLAB<br />

Kromě různé velikosti mohou mít tyto body i jinou barvu než černou, nebo i<br />

různým bodům jednoho fraktálu může být přiřazena různá barva (viz pravá část obr.<br />

27).<br />

Vykreslovanými body nemusí teoreticky být přímo „body“ (v Matlabu nazývané<br />

point), ale například i kruhy, trojúhelníky, různé symboly jako + , ∗ , × apod., nicméně<br />

to nemá u fraktálů velké uplatnění, protože při zobrazování fraktálů je naopak užitečné<br />

tyto jednotlivé body, kterými je fraktál tvořen, „nevidět“.<br />

43


6 POKROČILÁ VIZUALIZACE<br />

Tato kapitola nejprve obecně pojednává o programu POV-Ray. Poté se zabývá<br />

exportováním dat z Matlabu a vytvářením scén v programu POV-Ray. Další část se<br />

věnuje konkrétním ukázkám vizualizace fraktálů a na závěr kapitoly je zmíněna<br />

možnost vytváření animací.<br />

6.1 Úvod do programu POV-Ray<br />

Pro pokročilou vizualizaci fraktálů generovaných v prostředí Matlab je využit<br />

freewarový program POV-Ray (Persistance Of Vision Raytracer) ve verzi 3.6 [15].<br />

Důvody k vybrání právě tohoto programu jsou, že je volně šířitelný (tedy zdarma), má<br />

snadno pochopitelnou syntaxi a v neposlední řadě také to, že součástí tohoto programu<br />

je i velké množství předvytvořených příkladů, textur, barev apod., které je možné využít<br />

při vytváření vlastních scén.<br />

Jiným způsobem, jak provést tuto vizualizaci, by mohlo být, že data budou<br />

z Matlabu exportována do souborů *.wrl, tedy souborů psaných v jazyce VRML<br />

(Virtual Reality Markup Language). Soubory tohoto typu je poté možné importovat do<br />

programů jako jsou Bryce, Blender apod. a v nich provádět tuto vizualizaci.<br />

POV-Ray je, jak název tohoto programu napovídá, raytracer (raytracingový<br />

program). Tento název pochází z angl. ray tracing (tzv. metoda sledování paprsku, viz<br />

např. [16]). V reálném světě paprsky světla vychází ze světelného zdroje, lámou se a<br />

odráží od objektů (překážek), až se některé střetnou s okem pozorovatele. U techniky<br />

sledování paprsku paprsky naopak vycházejí z kamery (oka) a poté jsou opět sledovány<br />

při průchodu scénou až ke světelným zdrojům, které osvětlují scénu.<br />

Ray tracing představuje jednu z metod renderování (z angl. rendering). Rendering<br />

označuje tvorbu reálného obrazu na základě počítačového modelu (viz [17]).<br />

Vstupem programu POV-Ray je textový soubor, který obsahuje popis<br />

zobrazované scény (její zdrojový text). Vlastnosti scény jsou ve zdrojovém textu<br />

popsány pomocí jazyka, který je podobný jazykům programovacím (viz [18]). Protože<br />

ale existují modelovací programy, které exportují kód pro POV-Ray, není znalost tohoto<br />

programovacího jazyka nezbytná (viz [19]).<br />

45


KAPITOLA 6. POKROČILÁ VIZUALIZACE<br />

6.2 Export dat z Matlabu a vytváření scén v programu POV-Ray<br />

Některé m-soubory vytvořené pro potřeby kapitol 3 a 4 byly rozšířeny o povely a<br />

příkazy, které umožňují export dat (tedy pozic bodů vypočítaného fraktálu). Takto<br />

rozšířené soubory mají názvy jako například kochovakrivkapov.m apod. Po spuštění<br />

takového souboru se nejen pomocí Matlabu vypočítá a zobrazí příslušný fraktál, ale<br />

dojde navíc k vytvoření nového textového souboru s příponou .pov (například<br />

kochovakrivka.pov), který bude obsahovat vypočítané souřadnice bodů, kterými je<br />

fraktál tvořen. Tento soubor se bude nacházet ve stejném adresáři jako spouštěný m-<br />

soubor.<br />

Takto rozšířené m-soubory obsahují také příkazy, které do nově vytvářeného<br />

souboru *.pov navíc přidají informace o „předvytvořené“ scéně pro program POV-Ray.<br />

Tato předvytvořená scéna přidává k souřadnicím bodů, které vytvářejí fraktál, zvolený<br />

rozměr, barvu (nebo případně texturu) a tvar (nejčastěji v podobě koule). Součástí<br />

předvytvořené scény jsou také informace o pozici a natočení kamery, o zdrojích světla,<br />

pozadí apod.<br />

Tedy po spuštění například souboru s názvem kochovakrivkapov.m dojde<br />

k zobrazení této křivky pomocí Matlabu (viz obr. 16) a dále bude vytvořen nový soubor<br />

kochovakrivka.pov. Po spuštění tohoto nově vytvořeného souboru v programu POV-Ray<br />

dojde k vytvoření a zobrazení nového obrázku (viz obr. 28).<br />

Obr. 28 Kochova křivka zobrazená pomocí programu POV-Ray.<br />

46


KAPITOLA 6. POKROČILÁ VIZUALIZACE<br />

Scény, které jsou součástí m-souborů, jsou pouze ukázkové a lze je libovolně<br />

upravovat a doplňovat přímo v textovém editoru programu POV-Ray a poté jimi i<br />

případně nahradit „předvytvořené“ scény v m-souborech. Návody na vytváření scén<br />

v programu POV-Ray lze nalézt např. v [20].<br />

6.3 Ukázky vizualizace s využitím programu POV-Ray<br />

Obr. 29 Scéna se třemi stromy.<br />

Obr. 30 Strom.<br />

47


KAPITOLA 6. POKROČILÁ VIZUALIZACE<br />

Obr. 31 Sierpinského trojúhelník.<br />

Obr. 32 Barnsleyovo kapradí.<br />

48


KAPITOLA 6. POKROČILÁ VIZUALIZACE<br />

Obr. 33 Les.<br />

6.4 Animace<br />

Přímo animace POV-Ray vytvářet sice neumí, ale umí vytvořit sekvenci snímků<br />

(viz např. [21]), z kterých lze poté animace jednoduše sestavit. Pro spojení POV-Rayem<br />

vytvořené sekvence snímků, a tedy pro vytvoření animace, byl použit freewarový<br />

program Rostrum Camera [22]. Ukázky takto vytvořených animací se nachází na<br />

médiu, které je součástí této práce.<br />

Vytvoření animace se provede tímto způsobem: spustí se soubor např. s názvem<br />

kochovakrivkapovanim.m (ten byl již doplněn o příkazy nutné pro vytváření sekvence<br />

snímků v programu POV-Ray). Dojde k vytvoření souboru s názvem<br />

kochovakrivkaanim.pov. Volba počtu vykreslených snímků se provede pomocí úprav v<br />

souboru QUICKRES.INI, který se nachází v podadresáři renderer nainstalovaného<br />

programu POV-Ray. Způsob, jak provádět tyto úpravy, je popsán např. v [21] a také ve<br />

vytvořeném helpu, který se nachází na přiloženém médiu. Po spuštění souboru<br />

kochovakrivkaanim.pov dojde k vytvoření zvoleného počtu snímků, které se pak<br />

jednoduše spojí do animace v programu Rostrum Camera.<br />

49


7 ZÁVĚR<br />

Začátek této bakalářské práce se obecně věnoval fraktálům, jejich historii, využití,<br />

rozdělení apod. Byly zde také vysvětleny pojmy z oblasti fraktálů, jejichž znalost je<br />

nejen užitečná, ale v některých případech i nezbytná pro správné pochopení dalších<br />

částí této práce, a proto je nebylo možné opomenout. K objasnění těchto pojmů se<br />

snažily přispět i některé obrázky fraktálů uveřejněné v této části bakalářské práce, které<br />

byly právě pro tento účel s využitím programu Matlab vytvořeny.<br />

Ze stejného důvodu se i části kapitol pojednávající o L-systémech a IFS nejprve<br />

věnovaly základním pojmům z oblastí L-systémů a IFS. Obě tyto kapitoly obsahovaly<br />

také množství příkladů fraktálů, které lze pomocí L-systémů a systémů iterovaných<br />

funkcí vytvořit. Každý z těchto příkladů byl doplněn o obrázek příslušného fraktálu,<br />

který byl vytvořen v matematickém softwaru Matlab. Některé z těchto příkladů<br />

obsahovaly takových obrázků víc a to z toho důvodu, aby bylo umožněno naznačit<br />

různé podoby a variace na daný příklad fraktálu, kterých lze dosáhnout. Z důvodu větší<br />

přehlednosti byly také vytvořeny dva přehledy fraktálů, které byly postupně uveřejněny<br />

v této práci. Tyto přehledy obsahují základní informace o těchto fraktálech a nachází se<br />

v příloze této práce.<br />

Pro pokročilou vizualizaci fraktálů generovaných v prostředí Matlab byl použit<br />

raytracingový program s názvem POV-Ray. Mezi důvody, proč byl vybrán právě tento<br />

program, mimo jiné patří, že je to volně šířitelný program, má relativně jednoduchou<br />

syntaxi a také například to, že to je poměrně hojně rozšířený program. Scény s fraktály,<br />

které byly vytvořené pro účely této práce, jsou pouze ukázkové a tedy jen naznačují<br />

možnosti programu POV-Ray v této oblasti. Totéž platí i pro vytvořené animace, které<br />

se nachází na přiloženém médiu, které je součástí této práce.<br />

Při snaze o výpočet fraktálů s větším počtem iterací (u L-systémů) nebo bodů (u<br />

IFS) se začíná projevovat nevýhoda generování fraktálů pomocí Matlabu a tou je velká<br />

výpočtová náročnost. To je způsobeno tím, že každý bod (u IFS) a každá změna polohy<br />

„želvy“ (u L-systémů) je vypočítávána zvlášť. Výpočtová náročnost by mohla být u IFS<br />

snížena využitím jiného algoritmu namísto algoritmu náhodné procházky.<br />

Velká výpočtová náročnost je patrná i při následné vizualizaci fraktálů<br />

v programu POV-Ray, a to zejména při vytváření animací. Mohlo by být zajímavé<br />

porovnat tyto hodnoty s hodnotami získanými při jiným způsobem prováděné<br />

vizualizaci. Data by mohla být exportována z Matlabu do souborů *.wrl, tedy souborů<br />

psaných v jazyce VRML, které je možné importovat do programů jako jsou například<br />

Bryce, Blender a další, a zde by následně byla vizualizace prováděna.<br />

Tato práce by mohla posloužit i k budoucím rozšířením. Jedním z nich by mohlo<br />

být rozšíření vytvářených L-systémů i IFS o další rozměr. Tomu by mohlo napomoci<br />

také to, že na přiloženém médiu jsou všechny m-soubory doplněny kromě stručného<br />

helpu také o okomentování jednotlivých sekvencí příkazů. To by mělo uživatelům, kteří<br />

s programem Matlab prozatím nemají velké zkušenosti, napomoci k pochopení, jakým<br />

způsobem byly fraktály s využitím Matlabu v této práci vytvářeny.<br />

51


LITERATURA<br />

[01] MAŘÍK, Vladimír; ŠTĚPÁNKOVÁ, Olga; LAŽANSKÝ, Jiří; a kolektiv. Umělá<br />

inteligence (3). Praha: ACADEMIA, 2001. ISBN 80-200-0472-6.<br />

[02] ZELINKA, Ivan; VČELAŘ, František; ČANDÍK, Marek. Fraktální geometrie -<br />

principy a aplikace. Praha: BEN, 2006. ISBN 80-7300-193-4.<br />

[03] ZAPLATÍLEK, Karel; DOŇAR, Bohuslav. MATLAB pro začátečníky. 2. vyd.<br />

Praha: 2005, BEN. ISBN 80-7300-175-6.<br />

[04] ZAPLATÍLEK, Karel; DOŇAR, Bohuslav. MATLAB tvorba uživatelských<br />

aplikací. Praha: 2004, BEN. ISBN 80-7300-133-0.<br />

[05] PRUSINKIEWICZ, Premyslaw; LINDENMAYER, Aristid. The Algorithmic<br />

Beauty of Plants. [PDF dokument]. New York: 1990, Springer-Verlag. Dostupné z:<br />

< algorithmicbotany.org/papers/abop/abop.lowquality.pdf><br />

[06] TIŠNOVSKÝ, Pavel. Fraktály [online]. 1999,2000 [cit. 2007-5-10]. Dostupné z:<br />

< http://www.fit.vutbr.cz/~tisnovpa/fract/clanky/0.htm><br />

[07] TIŠNOVSKÝ, Pavel. Seriál Fraktály v počítačové grafice [online]. 2005-2007 [cit.<br />

2007-5-10]. Dostupné z: <br />

[08] KOŽÁR, Martin; ORAJA, Tomáš; a další. Lindenmayerove systémy [online].<br />

1998-2006 [cit. 2007-5-10]. Dostupné z: <br />

[09] KOČAN, Peter; KANDRA, Rastislav; a další. IFS - systém iterovaných funkcií<br />

[online]. 1999-2006 [cit. 2007-5-10]. Dostupné z:<br />

.<br />

[10] Matlab Databaze: Fractals [databáze online]. Universität Stuttgart, 2002-2006.<br />

Dostupné z:<br />

<br />

[11] RIDDLE, Lawrence. Classic Iterated Function Systems [online]. 1998-2006, 5th of<br />

May 2006 [cit. 2007-5-10]. Dostupné z:<br />

<br />

[12] RUSTAD, James. Regular Point Fractals with Iterated Function Systems [online].<br />

[cit. 2007-5-10]. Dostupné z:<br />

<br />

53


LITERATURA<br />

[13] Cantorovo diskontinuum [online]. 2007 [cit. 2007-5-10]. Dostupné z:<br />

<br />

[14] STEINBAUER, Petr. Interpret deterministických bezkontextových L-systémů<br />

[online]. 2002 [cit. 2007-5-10]. Dostupné z:<br />

<br />

[15] POV-Ray [online]. Dostupné z: <br />

[16] DOLEŽAL, Jiří. Počítačová grafika pro geodety [online]. [cit. 2007-5-10].<br />

Dostupné z: <br />

[17] Rendering [online]. 2007 [cit. 2007-5-10]. Dostupné z:<br />

<br />

[18] POLÁCH, Eduard. Povray 2.2 [online]. 1999 [cit. 2007-5-10]. Dostupné z:<br />

<br />

[19] ČERNOHOUS, Pavel. POV-Ray - freewareový zázrak [online]. 2002 [cit. 2007-5-<br />

10]. Dostupné z: <br />

[20] LOHMÜLLER, Andrea; LOHMÜLLER, Friedrich. 3D Computer Graphics,<br />

Raytracing [online]. 1999-2007, 1st of May 2007 [cit. 2007-5-10]. Dostupné z:<br />

<br />

[21] MORAVEC, Tomáš. Animace molekul proteinů. [online]. 1999-2001 [cit. 2007-5-<br />

10]. Dostupné z: <br />

[22] Rostrum Camera [online]. Dostupné z:<br />

<br />

54


PŘÍLOHY<br />

Přehled fraktálů vytvořených pomocí L-systémů<br />

U každého fraktálu vytvořeného pomocí L-systémů je uveden jeho počáteční<br />

řetězec, úhel α a přepisovací pravidla. Dále pak jeho podoba (obrázek) a graf závislosti<br />

doby výpočtu na počtu iterací.<br />

Název fraktálu a jeho<br />

podoba<br />

Počáteční řetězec<br />

Úhel α<br />

Přepisovací pravidla<br />

Graf závislosti doby<br />

výpočtu (osa y ) v [s] na<br />

počtu iterací (osa x )<br />

F<br />

60 °<br />

F → F + F − −F<br />

+ F<br />

60<br />

50<br />

40<br />

30<br />

20<br />

10<br />

0<br />

1 2 3 4 5 6 7 8<br />

F − −F<br />

− −<br />

60 °<br />

40<br />

35<br />

F<br />

30<br />

25<br />

20<br />

15<br />

10<br />

5<br />

→ 0<br />

F F + F − −F<br />

+ F<br />

1 2 3 4 5 6 7<br />

55


PŘÍLOHA Přehled fraktálů vytvořených pomocí L-systémů<br />

FGF + + FF+<br />

+ FF<br />

60 °<br />

F → FF<br />

G → + + FGF - -FGF - -FGF<br />

+ +<br />

30<br />

25<br />

20<br />

15<br />

10<br />

5<br />

0<br />

1 2 3 4 5 6 7 8<br />

G<br />

90 °<br />

G → -HF + GFG + FH -<br />

→ + GF - HFH - FG +<br />

100<br />

H 0<br />

80<br />

60<br />

40<br />

20<br />

1 2 3 4 5 6 7 8<br />

FG<br />

60 °<br />

200<br />

150<br />

100<br />

50<br />

0<br />

1 2 3 4 5 6<br />

G → G + HF + + HF - FG - -FGFG - HF +<br />

H → -FG + HFHF + + HF + FG - -FG - H<br />

FG<br />

90 °<br />

G → G + HF +<br />

→ -FG - H<br />

60<br />

50<br />

40<br />

30<br />

20<br />

10<br />

H 0<br />

1 3 5 7 9 11 13 15<br />

56


PŘÍLOHA Přehled fraktálů vytvořených pomocí L-systémů<br />

+ +++F<br />

22 ,5°<br />

F → FF + [ + F - F - F] -[-F + F + F] 0<br />

25<br />

20<br />

15<br />

10<br />

5<br />

1 2 3 4 5<br />

+ +++F<br />

22 ,5°<br />

F → FF + [ + F - F - F] -[-F + F − F]<br />

25<br />

20<br />

15<br />

10<br />

5<br />

0<br />

1 2 3 4 5<br />

+ +++F<br />

22 ,5°<br />

F → FF + [ + F - F - F] -[-F − F + F]<br />

25<br />

20<br />

15<br />

10<br />

5<br />

0<br />

1 2 3 4 5<br />

40<br />

+ + + +G<br />

35<br />

30<br />

25<br />

22 ,5°<br />

20<br />

15<br />

10<br />

F → FF<br />

5<br />

G → F[+G][-G]FG<br />

0<br />

1 2 3 4 5 6 7 8 9<br />

+ + + +G<br />

22 ,5°<br />

F → FF<br />

G → F[ + G]F[-G] + G<br />

50<br />

40<br />

30<br />

20<br />

10<br />

0<br />

1 2 3 4 5 6 7 8 9<br />

57


PŘÍLOHA Přehled fraktálů vytvořených pomocí L-systémů<br />

+ +++F<br />

22 ,5°<br />

F → [+F]F[-F]F ,<br />

1<br />

p =<br />

3<br />

F → F[+F]F[-F][-F] ,<br />

1<br />

p =<br />

3<br />

F → FF -[-F+<br />

F + F] + [ + F - F + F] ,<br />

Doba výpočtu při stejném<br />

počtu iterací výrazně kolísá,<br />

což je způsobeno náhodou,<br />

která ovlivňuje výběr<br />

pravidla (a to i přesto, že<br />

pravděpodobnost výběru je<br />

vždy 3<br />

1 ).<br />

1<br />

p =<br />

3<br />

+ +++F<br />

22 ,5°<br />

Doba výpočtu při stejném<br />

počtu iterací výrazně kolísá,<br />

což je způsobeno náhodou,<br />

která ovlivňuje výběr<br />

pravidla.<br />

F → [+F]F[-F]F ,<br />

1<br />

p =<br />

2<br />

F → F[+F]F[-F][-F] ,<br />

1<br />

p =<br />

6<br />

F → FF -[-F+<br />

F + F] + [ + F - F + F] ,<br />

1<br />

p =<br />

3<br />

58


Přehled fraktálů vytvořených pomocí IFS<br />

U každého fraktálu vytvořeného pomocí IFS je uveden jeho název, obrázek a<br />

afinní transformace včetně jejich pravděpodobností p .<br />

a b c d e f p<br />

1/3 0 0 1/3 0 0 1/4<br />

1/<br />

3× cos( π / 3) − 1/<br />

3×<br />

sin( π / 3)<br />

1/<br />

3× sin( π / 3)<br />

1/<br />

3× cos( π / 3)<br />

1/3 0 1/4<br />

1/<br />

3× cos( π / 3) 1/<br />

3× sin( π / 3)<br />

− 1/<br />

3×<br />

sin( π / 3)<br />

1/<br />

3× cos( π / 3)<br />

1/2 3 / 6 1/4<br />

1/3 0 0 1/3 2/3 0 1/4<br />

a b c d e f p<br />

0,5 0 0 0,5 0,25 0 1/3<br />

0,5 0 0 0,5 0 0,5 1/3<br />

0,5 0 0 0,5 0,5 0,5 1/3<br />

a b c d e f p<br />

0,5 0 0 0,5 0 0 1/3<br />

0,5 0 0 0,5 0 0,5 1/3<br />

0,5 0 0 0,5 0,5 0,5 1/3<br />

59


PŘÍLOHA Přehled fraktálů vytvořených pomocí IFS<br />

a b c d e f p<br />

0,5 0 0 0,5 0,5 0 1/3<br />

0,5 0 0 0,5 0 0,5 1/3<br />

0,5 0 0 0,5 0,5 0,5 1/3<br />

a b c d e f p<br />

0,5 0 0 0,5 0 0 1/3<br />

0,5 0 0 0,5 1 0 1/3<br />

0,5 0 0 0,5 0,5 3 / 2 1/3<br />

a b c d e f p<br />

0 0 0 0,16 0 0 0,01<br />

0,2 -0,26 0,23 0,22 0 1,6 0,07<br />

-0,15 0,28 0,26 0,24 0 0,44 0,07<br />

0,85 0,04 -0,04 0,85 0 1,6 0,85<br />

60


PŘÍLOHA Přehled fraktálů vytvořených pomocí IFS<br />

a b c d e f p<br />

1/3 0 0 1/3 0 0 0,125<br />

1/3 0 0 1/3 0 1/3 0,125<br />

1/3 0 0 1/3 0 2/3 0,125<br />

1/3 0 0 1/3 1/3 0 0,125<br />

1/3 0 0 1/3 1/3 2/3 0,125<br />

1/3 0 0 1/3 2/3 0 0,125<br />

1/3 0 0 1/3 2/3 1/3 0,125<br />

1/3 0 0 1/3 2/3 2/3 0,125<br />

a b c d e f p<br />

0,382 0 0 0,382 0,3072 0,619 0,2<br />

0,382 0 0 0,382 0,6033 0,4044 0,2<br />

0,382 0 0 0,382 0,0139 0,4044 0,2<br />

0,382 0 0 0,382 0,1253 0,0595 0,2<br />

0,382 0 0 0,382 0,492 0,0595 0,2<br />

a b c d e f p<br />

0,255 0 0 0,255 0,3726 0,6714 0,1<br />

0,255 0 0 0,255 0,1146 0,2232 0,1<br />

0,255 0 0 0,255 0,6306 0,2232 0,1<br />

0,37 -0,642 0,642 0,37 0,6356 -0,0061 0,7<br />

61


PŘÍLOHA Přehled fraktálů vytvořených pomocí IFS<br />

a b c d e f p<br />

-0,121212 0,257576 0,151515 0,255 -6,721654 1,377236 0,05<br />

0,181818 -0,136364 0,090909 0,255 6,086107 1,568035 0,05<br />

0,787879 -0,424242 0,242424 0,255 1,758647 1,408065 0,9<br />

a b c d e f p<br />

0,088272 0,520988 -0,463889 -0,377778 0,78536 8,095795 0,2<br />

0,824074 0,281428 -0,212346 0,864198 -1,88229 -0,110607 0,8<br />

a b c d e f p<br />

0,195 -0,488 0,344 0,443 0,4331 0,2452 0,35<br />

0,462 0,414 -0,252 0,361 0,2511 0,5692 0,35<br />

-0,058 -0,07 0,453 -0,111 0,5976 0,0969 0,05<br />

-0,035 0,07 -0,469 -0,022 0,4884 0,5069 0,05<br />

-0,637 0 0 0,501 0,8562 0,2513 0,2<br />

Afinní pravidla jsou stejná jako u<br />

předcházejícího stromu. Jejich<br />

pravděpodobnosti jsou nyní ale<br />

stejné: p = 0, 2<br />

62


CD nosič<br />

Na přiloženém médiu, které je nedílnou součástí této bakalářské práce, se kromě<br />

elektronické verze této práce ve formátu .pdf nachází tyto adresáře:<br />

• PRG – obsahuje vytvořené m-soubory a el. verzi této práce ve formátu .doc<br />

• DOC – obsahuje soubory s doplňkovými materiály a dokumenty: grafy<br />

výpočtové náročnosti, vytvořené animace, několik ukázkových souborů ve<br />

formátu .pov, několik ukázkových obrázků, stručný help<br />

• APL – obsahuje aplikace využívané v této práci: POV-Ray, Rostrum Camera<br />

63

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!