Sie sind hier: Mathematik in Bildern - die Kunst ... > Die Koch'sche Schneeflockenkurve

Die Koch'sche Schneeflockenkurve

Samstag 28. Juni 2008 von
Simon Praetorius
Ein sehr simples Fraktal entsteht dadurch, dass man auf eine gerade Linie eine Funktion anwendet, die einen Teil der Linie verändert. Zum Beispiel kann man in der Mitte einer Geraden einen Zacken entstehen lassen. Das bedeutet aus einer Linie entstehen 4 Teillinien, auf denen dann wiederum diese Abbildung angewendet wird und auf die entstehenden Teillinien wieder, usw. Gibt man sich am Anfang ein gleichseitiges Dreieck vor, dann entsteht durch wiederholtes Anwenden der oben beschriebenen Abbildung eine sehr schöne Schneeflocke.
Nach der 1. Iteration
Nach der 2. Iteration
Nach der 3. Iteration
Nach weiteren Iterationen
In Matlab könnte man das folgendermaßen implementieren (wobei die Berechnung der Punkte sicher noch schöner geschrieben werden kann :) ). Das Argument Punkte ist eine Matrix, in der in der ersten Zeile die x-Koordinaten und in der zweiten Zeile die y-Koordinaten von einem Startweg eingegeben werden. Zu beachten ist, dass der letzte Punkt gleich dem ersten sein muss, wenn sich der Weg wieder shließen soll, z.B. bei einem gleichseitigen Dreieck. Das zweite Argument gibt die Anzahl der Iterationen an. Mehr als 7 ist nicht sinnvoll, da man die Unterschiede kaum mehr erkennt.
matlab Code
  • function [x,y]=fractal(punkte, tiefe)
  •  
  • [n1 n2] = size(punkte);
  • p = n2-1;
  • l = 4^tiefe;
  • n = p*l+1
  • x = zeros(n,1);
  • y = zeros(n,1);
  •  
  • for i=0:p
  • x(i*l+1) = punkte(1,i+1);
  • y(i*l+1) = punkte(2,i+1);
  • end
  •  
  • for i=1:tiefe
  • l=round(l/4);
  • for j=0:p-1
  • % Indizes
  • k0 = j*4*l+1;
  • k1 = k0+l;
  • k2 = k0+2*l;
  • k3 = k0+3*l;
  • k4 = (j+1)*4*l+1;
  •  
  • x(k1)=x(k0)+(x(k4)-x(k0))/3;
  • y(k1)=y(k0)+(y(k4)-y(k0))/3;
  • x(k3)=x(k4)-(x(k4)-x(k0))/3;
  • y(k3)=y(k4)-(y(k4)-y(k0))/3;
  •  
  • x(k2)=x(k1)+(x(k3)-x(k1))/2+sqrt(3)*(y(k1)-y(k3))/2;
  • y(k2)=y(k1)+(y(k3)-y(k1))/2+sqrt(3)*(x(k3)-x(k1))/2;
  • end
  • p=p*4;
  • end
  • plot(x,y,'-');
Besucher: 9066 | Permalink | Kategorie: Nicht eingeordnet
Tags: , ,
Kommentar hinzufügen