Zum Inhalt springen

Sierpinski-Dreieck

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 11. Mai 2004 um 00:38 Uhr durch Arbol01 (Diskussion | Beiträge) (=Zusammenhang mit dem Pascalschen Dreieck=). Sie kann sich erheblich von der aktuellen Version unterscheiden.
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


[[pl:Tr%F3jk%B1t Sierpi%F1skiego]]