Fraktální geometrie Projektanti:
Martin Čermák Lukáš Slavata
Konzultant:
Martin Švec
Cíl:
Plasnice, 11.7.2007
vykreslování různých fraktálů pomocí programu (IDL)
Teorie: Fraktál je geometrický obrazec, který má neceločíselnou dimensi(podle definice tzv. Hausdorffovy dimense) obsahující soběpodobné útvary . V našem projektu jsme se zabývali dvěma skupinami fraktálů, tzv. „Escape time fractals“ a čárovými fraktály. Čárové fraktály vznikají stále se opakujícím postupem, při kterém se z určitého geometrického obrazce část vyjme, popřípadě něčím nahradí, nebo se k obrazci část přidá. Jedním z čárových fraktálů je Cantorovo diskontinuum nebo „vločka“. U Cantorova diskontinua se vždy vyjme střední třetina, u „vločky“ se střední třetina nahradí rameny rovnostranného trojúhelníku o třetinové délce úsečky. Escape time fractals jsou definované rovnicí, podle které se dopočítávají nové souřadnice každého bodu, který je v daném kroku považován za součást množiny. Za součást množiny se považují body, jejichž orbit zůstává v konečných hodnotách(bod konverguje). K zjištění zda bod konverguje slouží tzv. bailout test, při kterém se určí hranice při jejímž překročení se bod již nepovažuje za součást množiny. Zvýšení poloměru hranice vede ke zlepšení přesnosti výpočtu, stejně jako zvýšení počtu cyklů, avšak klade větší nároky na výpočetní kapacitu. Podle čísla cyklu, při kterém bod opustí výpočet, je bodu přiřazena hodnota, podle níž se následně bod při zobrazení obarví. Příkladem Escape time fractals je Mandelbrotova množina, jejímž základním iteračním předpisem je rovnice z = z2 + c. Přidáváním dalších členů do rovnice a zvětšováním mocnitelů jsme dostali nové obrazce.
Obrazovka je při zobrazování rovinou komplexních čísel. Pogramy:
1.MANDELBROT Program MANDELBROT slouží k vykreslování Mandelbrotovy množiny, zvětšování jednotlivých částí množiny až do 2.500.000 násobného zvětšení(hranice matematických chyb) a ukládání zvětšených výřezů do souboru (formát PNG). Program se skládá z funkce MANDEL mandel, která dopočítává body množiny, a z procedury ZOOOM, která volá funkci mandel, množinu dále zobrazuje a ovládá přiblížení.
Zdrojový kód function mandel,m,n,t,r,xp,yp,radius ;funkce mandel ;vstupní parametry jsou velikost okna (m,n), zvětšení (t), počet kroků cyklu (r), posunutí středu vykreslované části množiny (xp,yp), hodnota při jejímž překročení se bod nepovažuje za součást množiny (radius) window,xs=m,ys=n,xpos=0,ypos=50 pole=intarr(m,n) ;definice dvourozměrného pole for k=0,m-1 do begin for l=0,n-1 do begin x=k*(((m/100.)/t)/m)-(((n/200.)/t)+xp) y=l*(((m/100.)/t)/n)-(((n/200.)/t)+yp) c=x d=y for q=0,r do begin
bx=x x=x*x-y*y+c y=2*bx*y+d ;zápis rovnice fraktálu if (x*x+y*y) gt radius then break endfor pole(k,l)=q endfor endfor ;dva vnořené cykly naplňující pole hodnotami return, pole ;výstupem funkce je naplněné pole end
pro zooom,m,n,t,r ;procedura zooom ;vstupní parametry jsou velikost okna (m,n), zvětšení (t), počet kroků cyklu (r) x=0. y=0. zacatek: g=mandel(m,n,t,r,x,y,5000.) tvscl,-g ;zobrazení pole g plots,[0,600],[20,20],color=250,/device plots,[100,100],[0,20],color=250,/device plots,[200,200],[0,20],color=250,/device plots,[300,300],[0,20],color=250,/device plots,[400,400],[0,20],color=250,/device plots,[500,500],[0,20],color=250,/device XYOUTS, 20, 2, 'exit',charsize=2, color=250,/DEVICE XYOUTS, 120, 2, 'reset',charsize=2, color=250,/DEVICE XYOUTS, 220, 2, 'save',charsize=2, color=250,/DEVICE kurzor: cursor,a,b,/device ;zjištění souřadnic kurzoru po kliknutí myší print,a,b if b lt 20 then $ begin if a lt 100 and a gt 0 then begin goto,hovno end if a lt 200 and a gt 100 then begin x=0. y=0. t=1. goto,zacatek
end if a lt 300 and a gt 200 then begin f=dialog_pickfile() ab=bytscl(g) write_png,f,ab goto, kurzor end if a lt 400 and a gt 300 then begin print, '4' end if a lt 500 and a gt 400 then begin print, '5' end if a lt 600 and a gt 500 then begin print, '6' end end $ ;ovládací prvky programu (exit, reset, save) else begin x=x-(a-(m/2))/t/100. y=y-(b-(n/2))/t/100. t=t*4. ;přepočítání souřadnic x,y pří zooomu na souřadnice základního zobrazení (bez zvětšení,t=1) goto, zacatek end hovno: end 2.CARA Program CARA slouží k vykreslení CANTOROVA DISKONTINUA. Program se skládá z funkce CARA, která počítá souřadnice krajních bodů elementárních úseček Cantarova diskontinua, a z procedury KRESLI, která volá fci CARA a zobrazuje Cantarovo diskontinuum. Zdrojový kód function cara,x ;funkce CARA ;vstupní hodnotou funkce je počet kroků a=fltarr(2,1) ;definice dvousloupcového pole a(0,0)=0. a(1,0)=1. ;naplnění počátečních hodnot pole (kraje přímky) for u=1,x do begin n=n_elements(a) b=fltarr(2,n) for v=0,(n/2)-1 do begin k=a(0,v) l=a(1,v) d=(l-k)/3.+k
e=((l-k)/3.)*2.+k b(0,v*2)=k b(1,v*2+1)=l b(1,v*2)=d b(0,v*2+1)=e end ;dva vnořené cykly dopočítávající souřadnice třetiny, která se vyjme z přímky a=b end return,a ;funkce vrací souřadnice krajních bodů přímek end pro kresli ;procedura KRESLI window,xs=802,ys=40 a=cara(7) ;volání fce CARA print,a n=n_elements(a) ;zjištění velikosti pole for h=0,(n/2)-1 do begin k=a(0,h) k=k*800 l=a(1,h) l=l*800 plots,[k,l],[20,20],color=250,/device ;cyklus přepočítávající souřadnice krajních bodů přímek a zobrazující přímky end end
Závěr: Při projektu se nám podařilo vytvořit dva programy generující fraktály, velmi lehce si osvojit práci s množinou komplexních čísel, pochopit základní ovládání a používání programu IDL a dozvědět se něco o fraktální geometrii.