home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1997 #3 / amigamamagazinepolishissue03-1 / ma_1995 / 09 / ami936.txt < prev    next >
Text File  |  1997-04-07  |  12KB  |  256 lines

  1. ***** PROSZË ABSOLUTNIE NIE POPRAWIAÊ NICZEGO WE WZORACH I W 
  2. LISTINGACH, ANI ROZDZIELAÊ "I" OD CYFRY TAM GDZIE JEST MOWA O 
  3. LICZBACH ZESPOLONYCH !!!!! **********************************
  4.  
  5. PORZÂDEK CZY CHAOS?
  6.  
  7. <lead>Wiëkszoôê z nas, obserwujâc przyrodë, upraszcza jâ,
  8. dopatrujâc sië w niej prostych bryî geometrycznych. Góry to
  9. stoûki, drzewa to walce, ziemia to pîaszczyzna, horyzont to linia
  10. prosta. W ten wîaônie sposób przyrodë opisywaî juû Euklides.  Czy
  11. tak jest naprawdë?
  12.  
  13. <a>Bolesîaw Szczerba
  14.  
  15. <txt>Inaczej potraktowaî problem Benoit Mandelbrot. W 1980 roku
  16. badaî on numerycznie pewne wielomiany zespolone i otrzymaî
  17. niesamowite i szokujâce obrazy (patrz ilustracje).  Doprowadziîo
  18. go to do stwierdzenia, ûe geometria euklidesowa nie nadaje sië do
  19. opisu przyrody -- góry nie sâ stoûkami, a linia brzegowa nie jest
  20. odcinkiem. Sâ to raczej owe (jak to okreôlaî Euklides)
  21. "bezksztaîtne" formy. Mandelbrot nazwaî je fraktalami od
  22. îaciïskiego (chyba) sîowa "fractus", co oznacza "podzielony",
  23. "uîamkowy". Nazwa nie jest przypadkowa -- odzwierciedla doskonale
  24. strukturë fraktali. Charakteryzuje je bowiem wysokie
  25. samopodobieïstwo -- kaûdy fragment przypomina caîoôê. Poza tym
  26. okazuje sië, ûe sâ to twory o wymiarze nie bëdâcym liczbâ
  27. caîkowitâ, co w oczywisty sposób przeczy tzw. zdrowemu
  28. rozsâdkowi. Ale jak mawiaî Albert Einstein, "zdrowy rozsâdek" to
  29. zbiór przesâdów i uprzedzeï, których czîowiek nabywa, zanim
  30. skoïczy 16 lat. Cóû, czy nam sië to podoba czy nie, nie sâ to ani
  31. twory jednowymiarowe (jak np. prosta czy odcinek) ani
  32. dwuwymiarowe (jak koîo czy prostokât). Czymûe wiëc sâ te
  33. tajemnicze fraktale?
  34.  
  35. Poniewaû ostatnio mimo "ôwiëtego" okresu wakacji byîa mowa o
  36. caîkach, to tym razem postanowiîem napisaê (w nagrodë dla
  37. wytrwaîych) o czymô bardziej spektakularnym. Nie bëdë nikogo
  38. obraûaî pytaniem, czy sîyszaî o fraktalach. Myôlë, ûe lwia czëôê
  39. Czytelników przynajmniej przewietrzyîa uszy tym terminem. Czëôê
  40. bawiîa sië moûe jakimô generatorem fraktali w stylu Chaos Pro,
  41. kilku bardziej ambitnych wklepaîo moûe jakiô
  42. gotowiec-fraktalowiec w BASIC-u ze starego numeru "Bajtka" i na
  43. tym koniec. Artykuî ten jest przeznaczony dla tych, którzy
  44. chcieliby sië dowiedzieê czegoô wiëcej o fraktalach i metodach
  45. ich generowania. Poniewaû nie dysponujë caîym numerem, tylko
  46. paroma stronami, ograniczë sië tylko do tzw. zbiorów Mandelbrota.
  47. O zbiorach Julii, przeksztaîceniach afinicznych i moûe jeszcze
  48. innych ciekawych rzeczach napiszë innym razem (moûe juû w
  49. nastëpnym artykule).
  50.  
  51. Aby zrozumieê istotë fraktali, trzeba przede wszystkim mieê
  52. pojëcie o liczbach zespolonych. Wiedza do tego potrzebna nie
  53. wykracza w zasadzie poza zakres materiaîu IV klasy o profilu
  54. matematyczno-fizycznym, a dla studentów kierunków ôcisîych czy
  55. technicznych jest to juû chleb powszedni. Dla przypomnienia:
  56. liczba zespolona to liczba postaci z=a+bi, gdzie a to tzw.
  57. czëôê rzeczywista (oznaczana jako Re(z)), b to czëôê urojona
  58. (oznaczana jako Im(z)), zaô i to wielkoôê speîniajâca równanie
  59. i^2 + 1 = 0. Zwróê uwagë, ûe i^2 = -1, co nie zachodzi dla ûadnej
  60. liczby rzeczywistej. Wniosek: i to nie jest liczba rzeczywista.
  61. Zbiór liczb zespolonych jest uogólnieniem zbioru liczb
  62. rzeczywistych -- te ostatnie to szczególny wypadek tych
  63. pierwszych dla b=0. Liczby zespolone przedstawiamy na
  64. pîaszczyúnie jako parë punktów (a, b). Ukîad wspóîrzëdnych
  65. przypomina kartezjaïski, ale zamiast osi x i y mamy oô
  66. rzeczywistâ Re(z) i oô urojonâ Im(z). Liczbie 1-2i odpowiada wiëc
  67. punkt (1,-2) w takim ukîadzie wspóîrzëdnych, liczbie 3i odpowiada
  68. punkt (0,3), liczbie 2 punkt (2,0) itd. Nie bëdë definiowaî
  69. podstawowych dziaîaï w takim zbiorze -- moûna to znaleúê w kaûdej
  70. ksiâûce do algebry wyûszej -- nie wnikajâc w szczegóîy podam
  71. tylko, jak wyglâda w takim zbiorze dodawanie oraz potëgowanie.
  72. Przyda sië to w dalszej czëôci artykuîu.
  73.  
  74. <l> z1+z2=(a1+b1i)+(a2+b2i)=(a1+a2)+(b1+b2)i=A+Bi
  75.  
  76. <txt>gdzie A=a1+a2 a B=b1+b2. Na pîaszczyúnie to punkt o
  77. wspóîrzëdnych (a1+a2,b1+b2).
  78.  
  79. <l> z^2=zz=(a^2-b^2)+(2ab)i=A+Bi
  80.  
  81. <txt>gdzie A=a^2-b^2, B=2ab. Na pîaszczyúnie to punkt o wspóîrzëdnych
  82. (a^2-b^2,2ab).
  83.  
  84. No, teraz po takim solidnym przygotowaniu teoretycznym moûemy
  85. przejôê do rzeczy. Wyobraúmy sobie ciâg liczb zespolonych
  86. {z0,z1,z2,z3,...}. Przyjmijmy, ûe z0=0, a kaûdy nastëpny
  87. wyraz ciâgu wyraûa sië przez poprzedni w kwadracie plus
  88. pewna staîa zespolona. Czyli zn+1=zn^2+c, gdzie
  89. zn+1 oznacza n+1 element ciâgu, zn -- n-ty wyraz ciâgu (czyli
  90. poprzedni wzglëdem zn+1), a c pewnâ staîâ zespolonâ
  91. speîniajâcâ tu rolë parametru. Dla uîatwienia podam kilka
  92. pierwszych elementów tego ciâgu:
  93.  
  94. <l> z0=0
  95.  
  96. z1=c
  97.  
  98. z2=c^2+c
  99.  
  100. z3=(c^2+c)^2+c
  101.  
  102. z4=[(c^2+c)^2+c]^2+c
  103.  
  104. ...
  105.  
  106. Jako êwiczenie proszë sobie podstawiê za c dowolnâ liczbë
  107. zespolonâ (np. 1+i) i policzyê kilka pierwszych wyrazów ciâgu,
  108. przy czym dodawanie i potëgowanie naleûy tu rozumieê w sensie
  109. dziaîaï na liczbach zespolonych tak, jak to podaîem wczeôniej.
  110. Okazuje sië, ûe dla pewnych wartoôci parametru c ciâg
  111. {z0,z1,z2,z3,...} jest ograniczony na pîaszczyúnie zespolonej, a
  112. dla innych nie. Ograniczonoôê oznacza tu tyle, co mieszczenie sië
  113. w caîoôci wewnâtrz koîa o pewnym promieniu. Moûna tu mówiê o
  114. analogii do geometrii, bo przecieû liczbom zespolonym odpowiadajâ
  115. punkty na pîaszczyúnie. Na przykîad kwadrat, odcinek czy zbiór
  116. skoïczonej iloôci punktów jest figurâ ograniczonâ, bo zawsze
  117. moûna dobraê koîo o takim promieniu, ûe bëdzie ono zawieraîo w
  118. sobie owe zbiory. Ale np. prosta, póîprosta czy pîaszczyzna juû
  119. nie jest zbiorem ograniczonym. Gdybyômy dla kaûdego c rysowali
  120. sobie wszystkie punkty owego ciâgu, to zobaczylibyômy, ûe albo
  121. wszystkie mieszczâ sië wewnâtrz zadanego koîa, albo czëôê wyîazi
  122. poza to koîo. Ale tu pojawia sië pierwszy problem. Trzeba
  123. narysowaê WSZYSTKIE wyrazy ciâgu. Ôwietnie, tyle ûe bëdziemy
  124. czekaê do siódmej nieskoïczonoôci, aby cokolwiek zobaczyê na
  125. ekranie, bo wyrazów ciâgu jest nieskoïczenie wiele.
  126.  
  127. W praktyce robi sië nieco inaczej. Dla wszystkich punktów ekranu
  128. monitora (a raczej odpowiadajâcych im wartoôci c) liczymy N
  129. pierwszych wyrazów ciâgu (N jest odpowiednio duûe). Nastëpnie
  130. sprawdzamy warunek, czy wszystkie te punkty leûâ wewnâtrz koîa o
  131. zadanym promieniu R, czyli czy zachodzi an^2+bn^2<R dla n=1,2,...,N
  132. -- przy czym zn=an+bni. Jeûeli wszystkie N punktów speînia ten
  133. warunek, to domniemujemy, ûe wszystkie nastëpne punkty teû go
  134. bëdâ speîniaê i rysujemy na ekranie punkt, odpowiadajâcy
  135. wspóîrzëdnym rozwaûanego wîaônie punktu c. Gdy czëôê punktów
  136. wyîazi poza koîo, to nie stawiamy punktu. Potem bierzemy kolejny
  137. punkt ekranu, obliczamy, jakiej wartoôci c on odpowiada, liczymy
  138. N pierwszych elementów ciâgu, sprawdzamy warunek ograniczonoôci
  139. itd., aû wreszcie trafi nas szlag, gdyû metoda ta jest niezwykle
  140. czasochîonna. Napiszë kiedyô, jak przyspieszyê te ûmudne
  141. obliczenia, czyniâc pewne przybliûenia i nie tylko.
  142.  
  143. No, ale co my tu mamy? Fajny rysunek, prawda? To jest wîaônie
  144. zbiór Mandelbrota. Jest to po prostu zbiór tych wartoôci
  145. parametru c, dla których wyrazy ciâgu {z0,z1,z2,z3...}, okreôlone
  146. zaleûnoôciâ rekurencyjnâ zn+1=zn^2+c, leûâ wewnâtrz koîa o staîym
  147. promieniu. I tu pierwszy kubeî zimnej wody: widaê wyraúnie, ûe
  148. zbiór Mandelbrota jest czarno-biaîy, a nie kolorowy, jakby sië
  149. komuô mogîo wydawaê. Kolorki we fraktalach biorâ sië stâd, ûe
  150. zamiast stawiaê punkt (czarny) lub go nie stawiaê, stawiamy punkt
  151. w kolorze zaleûnym od liczby punktów, mieszczâcych sië w kole.
  152.  
  153. Czas juû chyba pokazaê, co poûytecznego z tego wynika. Jak widaê,
  154. obliczenia potrzebne do narysowania fraktala sâ wcale pokaúne,
  155. ale od czego mamy komputery. Nadajâ sië one idealnie do tego,
  156. zwîaszcza te o dobrej grafice (Amiga, he, he) i duûej mocy
  157. obliczeniowej (tu gorzej). Niestety, trzeba dysponowaê albo
  158. gumowâ cierpliwoôciâ, albo szybkim komputerem. Bez jednej z tych
  159. dwóch rzeczy zwariujemy. Nie oszukujmy sië, Amiga staje sië
  160. komputerem od 4-6 MB RAM-u, twardego dysku i procesora co
  161. najmniej 030. Zresztâ popatrzmy na PC klo(w)ny -- 486 DX2 to dziô
  162. codziennoôê, a peceta bez twardego ysku jeszcze nie widziaîem...
  163. Jasne, ûe na piëêsetce teû moûna rysowaê w Deluxe Paint i pisaê w
  164. AMOS-ie, ale jeôli chcemy cokolwiek policzyê, odpaliê jakiô
  165. procesor tekstu, raytracer czy program graficzny typu ImageFX lub
  166. ADPro, to sami widzimy, co sië dzieje. Cóû, "jak sië nie ma, co
  167. sië lubi", to teû moûna, ale trzeba mieê nerwy ze stali.
  168.  
  169. Caîy ten mój monolog przetîumaczony na C przedstawia listing nr
  170. 1. Zgodnie z tradycjâ zakîadam jako takie uôwiadomienie w kwestii
  171. programowania w C (przynajmniej takie, ûeby nie narobiê bîëdów
  172. przy przeklepywaniu listingów lub wykryê podstawowe zrobione w
  173. druku, jak to np. zdarzyîo sië w numerze czerwcowym). Oto plik
  174. SCOptions dla kompilatora SAS/C 6.5
  175.  
  176. <l> MATH=STANDARD
  177.  
  178. CPU=68020
  179.  
  180. ERRORREXX
  181.  
  182. OPTIMIZE
  183.  
  184. LINK
  185.  
  186. OPTIMIZERTIME
  187.  
  188. <txt>przy czym w linië CPU= wpisz typ Twojego procesora.
  189.  
  190. Przyjrzyjmy sië bliûej programowi. Zdefiniowane wielkoôci da i db
  191. to skoki czëôci rzeczywistej i urojonej parametru c, jakie
  192. robimy, poruszajâc sië o jeden punkt ekranowy. Funkcja paleta()
  193. ustawia paletë ekranu na odcienie szaroôci.  Wygenerowany obrazek
  194. moûna potem wgraê do DPainta i ustawiê sobie paletë po swojemu,
  195. co zresztâ -- jak widaê z ilustracji -- równieû zrobiîem.
  196. Poniewaû obliczenia trwajâ doôê dîugo, umoûliwiîem przerwanie ich
  197. po narysowaniu kaûdej linii.  Wystarczy w tym celu najechaê na
  198. lewy górny punkt ekranu, gdy program skoïczy rysowaê aktualnâ
  199. linië, przerwie pracë.  Uwaûaj, bo dotyczy to kaûdego otwartego w
  200. danym momencie ekranu -- równieû Workbencha. Po wygenerowaniu
  201. obrazka, aby skoïczyê pracë, naleûy zrobiê to samo. I to samo
  202. naleûaîo zrobiê w programie z artykuîu o grawitacji (jak ktoô na
  203. to nie wpadî, to dla niego naprawdë chyba tylko AMOS...).
  204.  
  205. Ze swojej strony przepraszam tylko za maleïki bîâd, a raczej
  206. niedogodnoôê, we wspomnianym programiku. Dobrze jest, aby pod
  207. koniec programu po kaûdym sprawdzeniu poîoûenia myszki odczekaê
  208. np. sekundë. Inaczej zablokujemy procesor, co spowoduje znaczne
  209. zwolnienie pracy caîego komputera. Moûna sië posîuûyê instrukcjâ
  210. Delay(50), tak jak to zrobiîem tym razem. Po skompilowaniu
  211. program naleûy uruchomiê z CLI, podajâc 5 parametrów: zakres
  212. czëôci rzeczywistej parametru c, zakres czëôci urojonej i N.
  213. Zakresy parametru c najlepiej podawaê "kwadratowe", tzn. o
  214. dîugoôci zakresu czëôci rzeczywistej zbliûonej do dîugoôci czëôci
  215. urojonej, aby uniknâê spîaszczenia lub rozciâgniëcia obrazka. N
  216. to liczba pierwszych wyrazów ciâgu, jaka ma byê obliczana. Im
  217. wiëksze N, tym dokîadniejszy rysunek, ale i dîuûsze oczekiwanie
  218. na wynik obliczeï -- ma to znaczenie przy powiëkszaniu wycinka
  219. fraktala. Przed samym uruchomieniem programu proponujë jeszcze
  220. uruchomiê program GrabIFF, Quick Grab lub uaktywniê odpowiedni
  221. moduî w MagicCX, aby po wygenerowaniu obrazka zgraê go sobie na
  222. dysk.
  223.  
  224. Spójrzmy na rysunki od 1 do 6. Pierwszy przedstawia caîy zbiór
  225. Mandelbrota, odpowiadajâcy zakresowi Re(c)=<-1.8,1>,
  226. Im(c)=<-1.2,1.2>. Wystarczyîo tu N=100 pierwszych wyrazów ciâgu,
  227. aby otrzymaê wyraúny obraz. Nastëpne obrazki przedstawiajâ
  228. powiëkszenia kolejnych fragmentów brzegu zbioru Mandelbrota aû do
  229. dwustu miliardów razy!!! Zwróê uwagë, ûe w miarë powiëkszania
  230. trzeba zwiëkszaê N w celu uzyskania lepszej dokîadnoôci. Gdybyômy
  231. tego nie zrobili, otrzymalibyômy bardzo zaciemniony, zamazany i
  232. nieczytelny obrazek. Powiëkszaê moûemy teoretycznie w
  233. nieskoïczonoôê, a praktycznie do momentu dojôcia do tak maîych
  234. zakresów parametrów, ûe komputer przestanie je rozróûniaê. Nie
  235. zabezpieczyîem programu przed takâ ewentualnoôciâ.
  236.  
  237. Jeûeli chodzi o czas generowania, to na narysowanie caîego zbioru
  238. Mandelbrota (rys. 1.) czekaîem niecaîe póî godziny. Na ostatni
  239. (rys. 7.) dane mi byîo czekaê caîy dzieï... Nie jest tragicznie,
  240. ale wesoîo teû nie. Za tak dîugi czas obliczeï odpowiedzialny
  241. jest gîównie algorytm -- bardzo prymitywny, ale za to
  242. najprostszy. Na koniec dobra rada: jeôli chcesz podczas
  243. generowania obrazków robiê sobie coô innego, to z pewnoôciâ
  244. zauwaûysz spowolnionâ reakcjë systemu na wciskanie klawiatury.
  245. Moûna temu zaradziê, manipulujâc opóúnieniem i czëstoôciâ
  246. powtórzeï naciskanych klawiszy w systemowym programiku Input.
  247.  
  248. Miîej zabawy!
  249.  
  250. <przyp> Jeûeli podobajâ sië Wam artykuîy zwiâzane z problematykâ
  251. mat-fiz-chem, to dajcie znaê (jeûeli nie -- równieû).  Napiszcie,
  252. czego oczekujecie. Najciekawsze pomysîy na pewno uwzglëdnië.
  253.  
  254. Wszelkie uwagi moûecie kierowaê na e-mail:
  255. zfjmgr@usctoux1.cto.us.edu.pl
  256.