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Ã
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