Sie sind hier: Mathematik in Bildern - die Kunst ...

Mathematik in Bildern - die Kunst der Fraktale

Samstag 24. Mai 2008 von
Simon Praetorius
Vieles in der Mathematik wirkt oder ist sehr abstrakt und kaum greifbar, wenn man nicht wirklich in der Materie steht. Es gibt aber auch einige Themen, die man sich sehr wohl gut anschaulich machen kann. Ende der 1980er Jahre wurden sogenannte Fraktale sehr populär. Das sind Bilder, die mathematisch erzeugt, aber trotzdem ästhetisch sehr ansprechend sind. Es hat sich sogar eine ganze Kunstform mit solchen Bildern beschäftigt und man findet auch heute noch auf Postern oder Kalender viele Beispiele für solche Fraktale.
Aber wie entsteht nun ein Bild mit Hilfe der Mathematik? Ich möchte hier nur ein spezielles Fraktal beschreiben, das allerdings äußerst vielfältige Strukturen enthält und man ganze Kalender mit Ausschnitten aus diesem Fraktal füllen könnte: Das Mandelbrotfraktal (manchmal auch als Apfelmännchen bezeichnet). Dieses Bild entsteht, in dem man die sogenannte Mandelbrotmenge grafisch veranschaulicht.

Die Mandelbrotmenge ist folgendermaßen definiert:c∈ℂ gehört zur Menge, wenn die Folge zn+1=zn2+c mit z0=0 beschränkt ist, d.h. es existiert ein K∈ℝ, so dass |zn|<=K für alle n∈ℕ.Das klingt erstmal sehr theoretisch, aber auch ganz simpell eigentlich, aber trotzdem entstehen z.B. folgende Bilder, wenn man die komplexen Zahlen, die zu der Menge gehören schwarz einfärbt und die anderen Weiß und dann in der komplexen Zahlenebene darstellt:
Die gesamt Mandelbrotmenge
Das sieht aus wie Äste
Strukturen im Eis?
Ein schönes fast regelmäßiges Muster
Die Menge nochmal in Farbe
Seepferdchen
Eine Wirbelartige Struktur


Zum Erzeugen der Bilder habe ich Matlab verwendet und für die farbige Gestaltung einen Teil aus dem HSV-Farbspektrum genommen. Das ließe sich sicher noch verbessern und ich bin da für Vorschläge offen.
matlab Code
  • function [erg erg01]=mandelbrot(x,y,maxAbs,maxIter)
  • % mandelbrot(x,y,...) iteriert die komplexe Zahl c=(x,y)
  • % x...Realteil von c
  • % y...Imaginärteil von cc
  • % maxAbs...Grenze, um Beschränktheit zu prüfen (Default=1000^2)2)
  • % maxIter...Anzahl der Iterationen (Default=100)
  •  
  • if nargin<3
  • maxAbs = 1000^2;
  • end
  • if nargin<4
  • maxIter = 100;
  • end
  •  
  • % Abbruchgrenze für die Iterationn
  • eps = 10^-6;
  •  
  • im=0;
  • re=0;
  •  
  • for i=1:maxIter
  • % Berechnung von z^2
  • reNext = re^2-im^2+x;
  • imNext = 2*re*im+y;
  •  
  • % Divergenz
  • betrag = reNext^2+imNext^2;
  • if betrag>maxAbs
  • break;
  • end
  • % Konvergenz || Periodisch
  • if (re-reNext)^2+(im-imNext)^2<eps || (i>2 && betrag<eps)
  • i=maxIter;
  • break;
  • end
  • re=reNext;
  • im=imNext;
  • end
  •  
  • % Rückgabewerte erzeugen Anhand des "Zeitpunktes""
  • % vom Überschreiten der Iterationsgrenz einen Farbverlauff
  • if i<maxIter
  • erg = i*log(log(betrag) / log(4));
  • erg01 = 1-(1-exp((i/maxIter)))/(1-exp(1));
  • else
  • erg=2;
  • erg01=0;
  • end

matlab Code
  • function imgOfMandelbrot(w,h,X,Y,maxAbs,maxIter);
  • % imgOfMandelbrot generiert eine Veranschaulichung der Mandelbrotmenge
  • % w...width (Breite des zu generierenden Bildes in Pixel)
  • % h...height (Höhe des zu generierenden Bildes in Pixel))
  • % X=[xMin,xMax]...horizontaler Ausschnitt aus der Mandelbrotmenge (Default=[-2,0.75])
  • % Y=[yMin,yMax]...vertikaler Ausschnitt aus der Mandelbrotmenge (Default=[-1,1])
  • % maxAbs...Grenze, um Beschränktheit zu prüfen (Default=1000^2)2)
  • % maxIter...Anzahl der Iterationen (Default=100)
  •  
  • % Wenn nicht alle Parameter angegeben sind, dann Standardwerte setzen
  • if nargin<3
  • X = [-2,0.75];
  • end
  • if nargin<4
  • Y = [-1,1];
  • end
  • if nargin<5
  • maxAbs = 1000^2;
  • end
  • if nargin<6
  • maxIter = 100;
  • end
  •  
  • % den Anzeigebereich aufspannen
  • x=linspace(X(1),X(2),w);
  • y=linspace(Y(1),Y(2),h);
  •  
  • % wenn grey=1, dann Bilder in Graustufen generieren, sonst farbige
  • grey=1;
  •  
  • img=ones(h,w,3);
  • Fortschritt=0;
  • for i=1:w
  • for j=1:h
  • [erg erg01] = mandelbrot(x(i),y(j),maxAbs,maxIter);
  • if(erg~=2) % Punkt liegt nicht in der Menge
  • [red green blue] = hsv2rgb2(erg01,grey);
  • else % Punkt liegt in der Menge
  • red=0;green=0;blue=0;
  • end;
  • img(j,i,1)=red;
  • img(j,i,2)=green;
  • img(j,i,3)=blue;
  • end
  • if mod(i*100/w,5)==0
  • Fortschritt=Fortschritt+5
  • end
  • end
  • % Das Bild wird in die Datei mandelbrot.jpg gespeichert
  • imwrite(img,'mandelbrot.jpg','jpg','Bitdepth',8,'quality',90);

matlab Code
  • function [r g b]=hsv2rgb2(h,grey)
  • % hsv2rgb2(h,grey) ist eine Hilfsfunktion zur Umrechnung von HSV Werten in RGB Werte
  • % Nur der Werte h aus dem HSV-Spektrum wird variiert
  • % wenn grey=1, dann wird nur ein Grauton (Wert zwischen 0 und 1) zurückgegebenn
  •  
  • if(grey==1)
  • r=h;g=h;b=h;
  • else
  • h = mod(round(h),360);
  • r=0;g=0;b=0;
  •  
  • % Berechnung sehr umständlich gemacht..
  • % Es gibt sicher auch Formeln zum Umrechnen von HSV nach RGB
  • if(0<=h && h<=60)
  • r=255;b=51;
  • g=51+floor((204/60)*h);
  • elseif(61<=h && h<=120)
  • g=255;b=51;
  • r=255-floor((204/60)*(h-60));
  • elseif(121<=h && h<=180)
  • g=255;r=51;
  • b=51+floor((204/60)*(h-120));
  • elseif(181<=h && h<=240)
  • b=255;r=51;
  • g=255-floor((204/60)*(h-60));
  • elseif(241<=h && h<=300)
  • b=255;g=51;
  • r=51+floor((204/60)*(h-60));
  • elseif(301<=h && h<360)
  • r=255;g=51;
  • b=255-floor((204/60)*(h-60));
  • end
  •  
  • r=r/255;
  • g=g/255;
  • b=b/255;
  • end
Besucher: 8421 | Permalink | Kategorie: Nicht eingeordnet
Tags: , ,
Kommentar hinzufügen