õØC. MANDELBROTOVA MNOəINAõø¢∮0≥80⌠2≡75Γ71¢¢≈¢·¢ Jak lze na ATARI XL/XE generovat Mandelbrotovu mno(inu? Lze reprodukovat to, ')m se zab`vaj) renomovan) odborn)ci z oblasti po')ta'ov[ grafiky a k 'emu vyu()vaj) mocn* pole sp@a(en`ch superpo')ta'+? A to takov`ch superpo')ta'+, kter[ z@ejm% je&t% budou n%jak` 'as na 'ern[ listin% COCOM! Odpov%⇦ se dozv)te p@e'ten)m n*sleduj)c)ho 'l*nku.¢ Frakt*ly nejsou (*dnou (havou novinkou, za'ali se jimi zab`vat matematici ji( na p@elomu stolet). Ov&em rozkv%tu a uzn*n) se jim dostalo teprve s rozvojem v`po'etn) techniky od poloviny 70. let. Frakt*ly v matematice znamenaly podobn` objev jako torie relativity ve fyzice. Od 'as+ Newtona ve fyzice platily jist[ z*kony, pak p@i&el Einstein a zjistil, (e Newtonovy z*kony plat), ale pouze jako speci*ln) p@)pad pro n)zk[ rychlosti. V geometrii to bylo podobn[. Od dob Eukleida, ╱tj. od 3.st.p@.n.l.$ plat), (e bod m* rozm%r 0, p@)mka 1, plocha 2 atd. A najednou se objev) frakt*ly, kter[ maj) dimenzi necelo')selnou. Nejsou to ani body, ani p@)mky, ani plochy, jsou to objekty, kter[ le() n%kde mezi. Hranice Mandelbrotovy mno(iny je '*ra, ov&em je tak zproh`ban* a zkroucen*, (e p@eb)r* do ur'it[ m)ry rozm%r plochy. Co je d+le(it[, ono zvr*sn%n) se projevuje na v&ech ]rovn)ch zv%t&en). To proto m+(eme sledovat odhaluj)c) se scen[rie p@i jej)m postupn[m zv%t&ov*n).¢ Mandelbrotova mno(ina, snad nejzn*m%j&) z*stupce frakt*l+, je vygenerov*na pomoc) formule Z=Z2⇩C. ⇨)slo C je konstanta, ov&em komplexn), m* tedy re*lnou '*st CR a imagin*rn) '*st CI. Z je komplexn) prom%n*, m* slo(ky ZR a ZI.¢ Co vlastn% formule vyjad@uje? Nen) to rovnice, znak rovn)tka vyjad@uje p@i@azovac) p@)kaz. Formule je tedy p@epis, jak na z*klad% hodnot Z a C z)skat novou hodnotu Z. Tu spolu s nezm%n%n`m C znovu pou(ijeme do v`razu a v`sledkem je dal&) hodnota Z. Tento postup lze opakovat donekone'na. Jestli(e komplexn) ')slo Z vyj*d@)me pomoc) obou slo(ek jako ╱ZR,ZI$, pak druh* mocnina Z2 m* ╱podle pravidel o zach*zen) s komplexn)mi ')sly$ tvar ╱ZR2-ZR2⇩CR,2✓ZR✓ZI⇩CI$. Celou formuli lze p@epsat do tvaru:¢¢ ╱ZR,ZI$=╱ZR2-ZI2⇩CR,2✓ZR✓ZI⇩CI$¢¢P@itom ZR,ZI,CR a CI jsou ji( "oby'ejn*" re*ln* ')sla. M+(eme tedy pou()t b%(n[ n*soben) a s')t*n). Nap@)klad pro komplexn) ')sla:¢¢ C=1⇩i a Z=0⇩0✓i,¢¢tedy C=╱1,1$ a Z=╱0,0$ dost*v*me tedy posloupnost: ╱1,1$, ╱1,3$, ╱-7,7$, ... .¢ Jin`mi slovy pro ka(dou hodnotu C dost*v*me jednozna'n% ur'enou posloupnost ')sel, poslopnost bod+ komplexn) roviny. Na tuto poslopnost se budeme d)vat jako na cestu zdrojov[ho bodu C a na z*klad% vlasnost) t[to cesty budeme p@isuzovat vlastnosti po'*te'n)mu bodu C.¢ Te⇦ p@ijde to podstatn[. Do Mandelbrotovy mno(iny d*me jen takov[ body, kter[ na sv[ cest% nap@ekro') ur'it[ hranice, rozum%j nevzd*l) se od po'*tku o v)ce ne( ztanoven` limit. Jeliko( bylo nazna'eno, (e c)lem je zn*zornit situaci vizu*ln%, p@)@ad)me bod+m n%jak[ barvy. Jedna barva je vyhra(ena pro body pat@)c) do Mandelbrotovy mno(iny. Ostatn) body budou obarveny v z*vislosti na tom, jakou rychlost) p@ekro') stanoven[ hranice. Jak pestr* bude &k*la barevn`ch mezistup+, z*vis) pouze na grafick`ch schopnostech pou(it[ho po')ta'e. Program pro generov*n) Mandelbrotovy mno(iny lze napsat pom%rn% snadno, sta') vlastn% naprogramovat formuli uvedenou v ]vodu a pou()t ji na ka(d` zobrazovac) bod obrazovky. Pro snadn%j&) orientaci v p@ilo(en[m programu jsou d*le podrobn%ji pops*ny t@i z*kladn) '*sti pou(it[ho algoritmu. Toti( zji&t%n), zda bod je prvkem mno(iny ╱procedura ITERUJ$, zp+sob obarven) bodu ╱procedura OBARVI$ a postup obarven) cel[ plochy ╱procedura POCITEJ$.¢ Ne( se pokus)me konkretizovat rozt@)d%n) bod+, uva(ovan[ na za'*tku 'l*nku, mus)me vy@e&it je&t% jeden probl[m. Jak vlastn% zjist)me, (e bod na sv[ cest% nikdy nep@ekro') stanovenou hranici? Ji( sama formulace v sob% skr`v* paradox, nebo④ slovo "nikdy" v sob% skr`v* nekone'n` cyklus. Mus)me si pomoci mal`m trikem. Zavedeme n%co jako v`jezdn) dolo(ky s omezenou platnost). To znamen*, (e nep@ekro')-li hranice ve stanoven[m po'tu cykl+, je pova(ov*n za bod, kter` ji nep@ekro') nikdy.¢∈¢ Nyn) m+(eme slovn) ]vahy precizovat n*sleduj)c)m algoritmem:¢¢╱ZR,ZI$ = ╱0,0$ ;inicializace Z na komplexn) nulu¢¢POCET:=0 :')ta' cyklu¢¢REPEAT¢¢ ╱ZR,ZI$ = ╱ZR2-ZI2⇩CR,2✓ZR✓ZI⇩CI$¢¢ POCET:=POCET⇩1¢¢UNTIL ╱POCET=LIMIT$ or ╱Velikost╱Z$ >= HRANICE$¢¢Bod C obarvi podle hodnoty POCET.¢¢ Prvn) dva p@)kazy jsou inicializa'n). Je nulov*na prom%nn* Z a prom%nn* POCET, sleduj)c) d[lku cesty bodu C. Dal&) p@)kaz je p@)kaz cyklu. Ten skon') p@esn% v souladu s na&imi ]vahami v p@)pad%, (e je p@ekro'en stanoven` limit po'et cykl+, nebo bod p@ekro') hranici. Pro v`po'et komplexn)ho ')sla Z plat) n*sleduj)c) vzorec:¢ Velikost╱Z$ = odmocnina z ╱ZR2⇩ZI2$¢V programu je cel` test velikosti umocn%n na druhou, z d+vod+ urychlen) v`po'tu ╱nemus) se po')tat odmocnina$.¢ Obarven) bodu nen) probl[m kl)'ov`, ale ovlivuje v`tvarnou hodnotu obr*zku. V pou(it[m programu jsou k dispozici 4 barvy. V`sledek z*kladn)ho algoritmu ╱prom%nn* POCET$ je v intervalu <1,LIMIT>. T%mto hodnot*m je t@eba p@i@adit 4 mo(n[ barvy. V programu je zvolen n*sleduj)c) postup.¢ Body Mandelbrotovy mno(iny, tedy ty body, pro kter[ prom%nn* POCET nab`v* hodnoty LIMIT, jsou obarveny 'erven%. Bezprost@edn) okol) je zbarveno b)le. Pro men&) hodnoty prom%nn[ POCET se pravideln% st@)daj) barvy modr*, (lut* a 'erven*. Vytv*@ej) tak pr*v% ony vrstevnice okol) Mandelbrotovy mno(iny.¢ Co jsme zat)m ur'ili? Jednomu konkr[tn)mu bodu v rovin% ╱bod C$ jsme p@i@adili barvu. Jestli(e v&ak um)me obarvit jeden bod, um)me obarvit celou komplexn) rovinu. Sta') ji pouze vhodn% zobrazit na obrazovku monitoru. To se v%t&inou d%l* tak, (e na vodorovnou osu jsou zobrazeny re*ln[ hodnoty a na svislou hodnoty imagin*rn). Pou(it` grafick` re(im poskytuje 160x192 pixel+. P@edpokl*dejme, (e chceme na obrazovku zobrazit '*st komplexn) roviny s lev`m doln)m rohem zadan`m bodem ╱XSOUR,YSOUR$ a d[lkou strany VEL. ╱To je t@eba ch*pat, (e lev` doln) roh obd[ln)ku je ur'en bodem s re*lnou sou@adnic) XSOUR a imagin*rn) sou@adnic) YSOUR.$ Transformaci provedeme jednodu&e. Obd[ln)k komplexn)ch ')sel rozd%l)me na 160x192 mal`ch obd[ln)'k+. Z ka(d[ho vybereme z*stupce - lev` doln) roh - a pro jeho sou@adnice ur')me obarven). V`sledkem pak zbarv)me odpov)daj)c) bod obrazovky. Pozor, je t@eba vz)t v ]vahu pom%r grafick`ch sou@adnic - jednomu pixelu na &)@ku odpov)daj) 2 pixely na v`&ku.¢ Co pot@ebujeme zn*t, jsou rozm%ry mal[ho obd[ln)'ku. Ty jsou ur'eny v prom%nn`ch KROKX a KROKY. Po t%chto kroc)ch je ve dvou vno@en`ch cyklech FOR pro&lap*na cel* obrazovka a t)m zobrazena po(adovan* '*st komplexn) roviny.¢ Je&t% n%kolik pozn*mek k volb% konstant v programu. Z hlediska 'asu m* kl)'ov[ postaven) prom%nn* LIMIT, ur'uj)c) "pracovn) nekone'no". Pro celkov` pohled na mno(inu sta') bohat% hodnota 100. Jakmile v&ak za'neme zkoumat podrobn%j&) detaily ╱VEL @*dov% 10 na -4$ je t@eba LIMIT zv%t&it alespo na 200, nebo④ se za')naj) ztr*cet detaily a hranice mno(iny se st*v* hladkou. Je to podobn[ jako p@i zhotovov*n) fotografie: pro podrobn%j&) vykreslen) mus)me pap)r osv%tlit del&) 'as. Kone'n% pro plo&ky o velikosti 10 na -8 op%t mus)me p@idat LIMIT na hodnotu 300. Samoz@ejm%, p@i zm%n% hodnoty LIMIT mus)me upravit i algoritmus barven) bodu.¢ Konstanta HRANICE je pevn% zvolena na 4, s ')m( vysta')me v libovoln[m m%@)tku. To odpov)d* testov*n) na velikost men&) ne( 2 ╱= odmocnina ze 4$.¢ Z*kladn) p@ehled o tom, kam se p@i kreslen) pustit, d*v* sch[ma Mandelbrotovy mno(iny. P@i p@echodu na men&) plo&ky je v`hodn[ vybrat oblasti na hranici, nebo④ tam je scen[rie nej(iv%j&). Nab)z) se ot*zka, kam a( se p@i zv%t&ov*n) m+(eme dostat? K zodpov%zen) je t@eba uv*(it, jak jsou v po')ta'i reprezentov*na ')sla. U ATARI je ')slo ulo(eno v tzv. BCD form*tu na 6 bytech. 5 byt+ obsahuje 10 ')slic, ve zbyl[m bytu je exponent. A pr*v% pr*v% t%chto 10 cifer ur'uje limit, kam a( lze plo&ku zmen&it. S dostate'nou p@esnost) lze zad*vat prom%nnou VEL a( k 10 na -9 a( -10. Zd* se to m*lo - pou(ijeme mal` p@)m%r. Kdyby cel* Mandelbrotova mno(ina, kter* je dlouh* asi 2.5, m%@ila opravdu dva a p+l metru, pak jej) detail o velikosti 10 na -3 je roven jednomu milimetru. Plo&ky o velikosti 10 na -5 odpov)daj) velikost) buk*m, 10 na -7 ji( vir+m. P@echodem na @*dy 10 na -9 na obrazovce vid)te v jednotliv`ch bodech obrazovky dokonce atomy! Takovouto pod)vanou st%() poskytne i elektonov` mikroskop.¢ Kam nasm%rovat pou④ do hlubin Mandelbrotovy mno(iny, z*le() jen na v*s. O frakt*lech je t[( naps*na @ada 'l*nk+ i knih, u n*s nap@. T88/5 nebo Vesm)r 8/88. ⇨*st tohoto 'l*nku je zkr*cenou verz) 'l*nku z VTM 18/89.¢ ②ada oblast) Mandelbrotovy mno(iny byla ji( prozkoum*na a zmapov*na. Ov&em hranice frakt*ln) mno(iny jsou nekone'n[ a badatel+ je konec konc+ jen kone'n` po'et. Ka(d` tedy m* mo(nost vybrat si zde svou parcelu. Ne v&echny jsou zaj)mav[, ale kr*sa neb`v* tak[ k vid%n) na ka(d[m n*ro(). Odm%na za opakovan[ pokusy a dlouh[ hodiny 'ek*n) bude jist% st*t za to. Pohled na postupn% odkr`van[ bizardn) a fascinuj)c) tvary n*s nutn% vede k zamy&len), kde se to v t[ formuli Z=Z2⇩C bere.¢ A d* se @)ci (e to nen) jen kr*sa do sebe zahled%n* a samo+'eln*. Je to oslava p@)rody a p@)rodn)ch proces+ t)m, (e je napodobujeme.¢ Jako uk*zka v`sledk+ mnohahodinov`ch v`po't+ je oti&t%na serie obraz+ p@enesen* z barevn[ho obrazu na 'ernob)lou kopii pomoc) zapisova'e Alfigraf.¢ Ka(d` obraz je charakterizov*n 'tve@ic) v z*vorce uveden`ch parametr+ X, Y, Limit, Velikost a v ka(d[m n*sleduj)c)m obrazu je zv%t&en` detail z p@ede&l[ho.¢ Jednotliv[ obrazy, pokud by m%ly stejn[ m%@)tko, lze tak[ skl*dat do v%t&)ch celk+ a imitovat tak vysokou rozli&ovac) schopnost monitor+ velk`ch po'ita'+ i mo(nosti jejich tisk*ren. Je to umo(n%no zejm[na t)m, (e n*& "matematick` mikroskop" netrp) typick`mi vadami optiky jako jsou distorze, sklenut) pole a podobn%.¢ Rychlost v`po'tu superpo'ita'+ v&ak lze kompenzovat jen notnou d*vkou trp%livosti, (ivenou pocitem, (e tam kam jin) nahl[dnou za minuty a desetitis)ce dolar+, tam my nahl[dneme s na&)m Atari tak[.¢ Sice to m+(e trvat n%kolik dn), b%hem kter`ch si po'ita' bude po')tat. Av&ak my zat)m m+(eme d%lat n%co "u(ite'n[ho" a nav)c - a to je to pot%&iteln[ - dolary u&et@)me.¢¢