algorytm.org Algorithms Fraktale Zbiór Mandelbrot'a  
Home AlgorithmsData structuresAlgorithmics turorialPractiseDesign patternsIT Law SitemapPortal historyContributors ForumToolsWrite an articleSearch 

Zbiór Mandelbrot'a
User Rating: / 7
PoorBest 
Written by Tomasz Lubiński   
Monday, 18 August 2008 22:39
There are no translations available.

Po raz pierwszy pojęcie fraktala zostało użyte przez Benoit Mandelbrota w latach 70-tych XX wieku. Po łacinie fractus oznacza podzielny, ułamkowy, cząstkowy. Nazwa ta nie ma ścisłej matematycznej definicji. Oznacza ona obiekty, które mają nietrywialną strukturę w każdej skali oraz są samopodobne - czyli każda ich część przypomina całość. Mandelbrot prowadził badania przy pomocy komputera. Pierwsze obrazy zbioru opublikował w roku 1980.

By zdefiniować zbiór Mandelbrota, zdefinujemy najpierw dla danego punktu p na płaszczyźnie zespolonej nieskończony ciąg liczb zespolonych z0, z1, z2, ... o wartościach zdefiniowanych następująco:
z0 = 0
zn+1 = zn2 + p

Zbiór Mandelbrota (ang. Mandelbrot Set) definiujemy jako zbiór liczb zespolonych p takich, że zdefiniowany powyżej ciąg nie dąży do nieskończoności.

A gdzie tutaj wspomniany fraktal? Otóż fraktalem jest brzeg tego zbioru. W praktyce by narysować fraktale oblicza się kolejne przybliżenia zbioru, które oznacza się różnymi kolorami. I tak kolejne przybliżenia zdefiniujemy jako zbiór liczb zespolonych p takich, że:
  • 1 przybliżenie: wszystkie punkty
  • 2 przybliżenie: |z1| < 2
  • 3 przybliżenie: |z1| < 2 oraz |z2| < 2
  • 4 przybliżenie: |z1| < 2 oraz |z2| < 2 oraz |z3| < 2
  • ...
  • n-te przybliżenie: |z1| < 2 oraz |z2| < 2, ... |zn-1| < 2


Zatem funkcję obliczającą z jakim maksymalnym przybliżeniem dany punkt p należy do zbioru Mandelbrota możemy zdefiniować następująco (gdzie maxIter to maksymalne przybliżenie z jakim chcemy wyznaczać zbiór):

przyblizenie(p)
begin
  iter := 0;
  z := 0;

  repeat
     iter := iter + 1;
     z = z^2 + p;
  until (|z| < 2) and (iter < maxIter)

  przyblizenie = iter;
end;


Przypomnijmy jeszcze działania na liczbach zespolonych jakie będziemy potrzebować podczas obliczeń. Liczba zespolona z składa się z części rzeczywistej zr oraz części urojonej zi, czyli z = zr + i zi.
Potęgowanie definiujemy następująco:
z2 = (zr2 - zi2) + i(2 zr zi)
Dodawanie definiujemy następująco:
a + b = (ar + br) + i(ai + bi)
Moduł z liczby zespolonej definiujemy następująco:
moduł liczby zespolonej |z|=\sqrt{z_{r}^{2}+z_{i}^{2}} ,
dlatego też w praktyce warunek |z| < 2 zastępuje się równoważną nierównością (zr2 + zi2) < 4. Pozbywamy się tutaj czasochłonnego obliczania pierwiastka kwadratowego.

Dla kolejnych punktów na płaszczyźnie, obliczamy przybliżenia zgodnie z podanym algorytmem i wzorami. Oś X oznacza wartości reczywiste, natomiast os Y wartości urojone. Przedstawiając kolejne przybliżenia na płaszczyźnie (lewy górny róg ma współrzędne -2.0 + -1.25i, dolny prawy róg ma współrzędne 0.5 + 1.25i) i oznaczając je różnymi kolorami otrzymujemy wynik - zbiór Mandelbrota, zwany też czasami ze względu na swój wygląd żukiem Mandelbrota. Na obrazie poniżej kolory kolejnych przybliżeń wyznaczono zgodnie z modelem HSV, ale można też użyć do tego celu odcieni szarości, bądź innego modelu barw.
Zbiór Mandelbrot'a


    Dokonując przybliżenia wybranych obszarów możemy otrzymać m.in:
  • dolinę słonia (ang. elephant valley) - (lewy górny róg ma współrzędne 0.25 + -0.05i, dolny prawy róg ma współrzędne 0.35 + 0.05i)
    Zbiór Mandelbrot'a - dolina słonia


  • dolinę konika morskiego (ang. sea horse valley) - (obszar w okolicy punktu -0.75 + 0.1i), poniżej przybliżenie jednej ze struktur w dolinie konika morskiego
    Zbiór Mandelbrot'a - dolina konika morskiego




.

Author Progam language Comment Download Rate
Tomasz Lubiński C# MS Visual Studio .net
Implementation in C#
/ 0
Tomasz Lubiński C/C++ Borland Builder 6
Implementation in C/C++
/ 0
Tomasz Lubiński Delphi/Pascal Borland Delphi 5
Implementation in Delphi/Pascal
/ 1
 
Add your implementation for this algorithm
  • Login first
File:
Progam language:
Comment:
  To be able to add your implementation, login first



Last Updated on Tuesday, 25 May 2010 22:24
 

Add comment







Danation
Donate us


RSS Channels
Articles
Implementations
Comments
Forum


Bookmarks








Poll
Czy znalazłeś na stronach www.algorytm.org to czego szukałeś?
 

www.algorytm.org (c) 2000-2010