Sierpinski-Dreieck
Sierpinski-Dreieck |
Sierpinski-Dreieck in der Ebene |
Ein Sierpinski-Dreieck ist ein Fraktal, der durch rekursive Aufteilung eines Vorgängerdreiecks n-1 in vier weitere Dreiecke erhalten wird. Geht n gegen unendlich, spricht man von einer Sierpinski-Fläche. Die Dimension der Sierpinski-Fläche beträgt D=log(3)/log(2)=1,58..., also etwas zwischen Linie (D=1) und Fläche (D=2).
Eine Darstellung des Sierpinksi-Dreiecks ist auch in der dritten Dimension möglich: Der Initiator ist ein Tetraeder. Aus diesem wird als Iterationsschritt aus der Mitte ein Oktaeder mit halber Kantenlänge herausgeschnitten. Übrig bleiben vier Tetraeder, aus denen wieder je ein Oktaeder herausgeschnitten wird, usw. Die Dimension für dieses Gebilde ist D=log(4)/log(2)=2, obwohl es sich hierbei um eine Figur im dreidimensionalen Raum handelt.
Chaos-Spiel
Abgesehen von der rekursiven Darstellung gibt es noch einen Zufallspunkt-Algorithmus zur näherungsweisen Konstruktion des Sierpinski-Dreiecks: Das Chaos-Spiel.
Dabei wird ein gleichseitiges Dreieck mit den Ecken A, B, C aufgezeichnet und ein zufälliger Punkt im Inneren des Dreiecks gewählt (er kann aber auch außerhalb liegen, ohne das Ergebnis wesentlich zu verändern). Nun wird pro Schritt eine Ecke zufällig ausgewählt (die Wahrscheinlichkeit für die Ecken sind gleich) und der Punkt gedanklich mit der gezogenen Ecke verbunden. Die Mitte dieser Strecke markiert nun den Punkt für die nächste Runde. Wiederholt man dies sehr oft, bilden die Punkte eine Näherung des Sierpinksi-Dreiecks. Wenn man die Punkte auch noch je nach ausgewählter Ecke unterschiedlich einfärbt, also z.B. A = grün, B = rot und C = blau, dann bekommt man drei unterschiedlich gefärbte Sierpinski-Dreiecke im Sierpinski-Dreieck.
Zusammenhang mit dem Pascalschen Dreieck
Mit dem Sierpinski-Dreieck verwandt ist auch das Pascalsche Dreieck. Um das zu verdeutlichen, stelle man sich die ungeraden Zahlen als schwarz markiert vor und die geraden als farblos. Die ungeraden Zahlen des Pascal-Dreiecks werden der Einfachheit halber als Doppelkreuze angegeben (und die geraden Zahlen weggelassen):
. . . # # # # # # # . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # Null-Meer # # # # # # # # # # # . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #. . . . . . . . . 1 1 1 # # 1 3 3 1 # # # # # # # # # # Null-See # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . .
. .
Aber egal, wie weit man das Gebilde erweitert, es wird nie ein Sierpinski-Dreieck daraus. Wenn man wissen will, wo sich das Pascal-Dreieck ungefähr im Sierpinski-Dreieck lokalisieren lassen könnte: es ist ein gedachter mathematischer Punkt auf der Mitte der Strecke der rechten, oder wahlweise linken Seite des (initialen) Dreiecks. Das bedeutet, wenn man von 1 aus in irgend eine Richtung laufen würde, käme man nie an irgend einen Eckpunkt. Ebenso wenig könnte ein Beobachter, der das ganze Sierpinski-Dreieck von oben betrachten würde, je das Sierpinski-Dreieck so vergrößern, dass er den Läufer jemals sehen würde.
Code
Java-Programm
Eine Mögliche Realisierung des Problems mit Java (obiges Applet). Das Dreieck kann in der Ebene verschoben und seine Größe kann verändert werden. Parameter der rekursiven go-Methode: b: Kantenlänge, hpX und hpY: Koordinaten des Höhenfußpunktes, lh: Höhe, lvl: Rekursionstiefe.
public void triang(Graphics g, int x0, int y0, int x1, int y1, int x2, int y2){ g.drawLine(x0, y0, x1, y1); g.drawLine(x1, y1, x2, y2); g.drawLine(x2, y2, x0, y0); } public void go(Graphics g,int b, int hpX, int hpY, int lh, int lvl){ int x0,x1,x2,y0,y1,y2; if (lvl<=0) return; x0=hpX-(b/2); y0=hpY-(lh/2); x1=hpX+(b/2); y1=hpY-(lh/2); x2=hpX; y2=hpY; triang(g, x0, y0, x1, y1, x2, y2); go(g,(b/2), hpX, hpY-(lh/2), lh/2, lvl-1); go(g,(b/2), hpX+(b/2), hpY, lh/2, lvl-1); go(g,(b/2), hpX-(b/2), hpY, lh/2, lvl-1); } public void paint(Graphics g){ setBackground(Color.white); triang(g, ihpX-ib, ihpY, ihpX+ib, ihpY, ihpX, ihpY-ilh); go(g, ib, ihpX, ihpY, ilh, ilvl); }
Pascal-Programm
Beispiel-Code in Object Pascal (Delphi) zur grafischen Darstellung eines Sierpinski-Dreiecks:
var Image1: TImage; // muss initialisiert werden procedure Sierpinski(x1, y1, x2, y2, x3, y3: Extended; t: Integer); begin if t > 0 then begin Image1.Canvas.MoveTo(Round(x1), Round(y1)); Image1.Canvas.LineTo(Round(x2), Round(y2)); Image1.Canvas.LineTo(Round(x3), Round(y3)); Image1.Canvas.LineTo(Round(x1), Round(y1)); Sierpinski(x1, y1, x1 + (x3 - x1) / 4, ((y1 - y2) / 2) + y2, x2, y1, t - 1); Sierpinski(x1 + (x3 - x1) / 4, ((y1 - y2) / 2) + y2, x2, y2, x1 + (x3 - x1) / 4 * 3, ((y1 - y2) / 2) + y2, t - 1); Sierpinski(x2, y1, x1 + (x3 - x1) / 4 * 3, ((y1 - y2) / 2) + y2, x3, y3, t - 1); end; end; --- Beispielaufruf Sierpinski(20, 350, 220, 50, 420, 350, 6);
Logo-Programm
to sierpinski :stufe :laenge make "stufe :stufe - 1 make "laenge :laenge / 2 if :stufe > 0 [repeat 3 [sierpinski :stufe :laenge fd :laenge * 2 rt 120]] if :stufe = 0 [repeat 3 [repeat 3 [fd :laenge rt 120] fd :laenge * 2 rt 120]] end
Beispielaufruf: sierpinski 6 300
Logo-Programm mit "Pfeilspitzen"-Fraktal
Die "Pfeilspitze" erzeugt auch ein schönes Sierpinski-Dreieck:
to pfeilspitze :stufe :laenge rpfeil :stufe :laenge end to rpfeil :stufe :laenge make "stufe :stufe - 1 make "laenge :laenge / 2 if :stufe > 0 [rt 60 lpfeil :stufe :laenge lt 60 rpfeil :stufe :laenge lt 60 lpfeil :stufe :laenge rt 60] if :stufe = 0 [rt 60 fd :laenge lt 60 fd :laenge lt 60 fd :laenge rt 60] end to lpfeil :stufe :laenge make "stufe :stufe - 1 make "laenge :laenge / 2 if :stufe > 0 [lt 60 rpfeil :stufe :laenge rt 60 lpfeil :stufe :laenge rt 60 rpfeil :stufe :laenge lt 60] if :stufe = 0 [lt 60 fd :laenge rt 60 fd :laenge rt 60 fd :laenge lt 60] end
Beispielaufruf: pfeilspitze 12 300
Weblinks
- http://www.seefsen.de/sierp.html Java-Applet zur Demonstration des Dreiecks
- http://www.jgiesen.de/ChaosSpiel/Chaos.html - Erklärung und Java-Applet zum Chaos-Spiel
- http://www.beisenkamp.schulnetz.hamm.de/Logo/sierp.htm - Logo-Code für das Dreieck
[[pl:Tr%F3jk%B1t Sierpi%F1skiego]]