Bei diesem Ansatz wird zuviel auf einmal versucht und führt daher zu einem Kauderwelsch.
Überlegen wir uns doch mal, was der Herr Sierpinski uns wirklich erzählen möchte und folgen unbeirrt diesen Ausführungen:
Zitat von
Wikipedia: Sierpinski-Dreieck:
- Zeichne ein Dreieck („Initiator“)
- Verbinde die Mittelpunkte der Seiten („Generator“) (dadurch wird das ursprüngliche Dreieck in vier deckungsgleiche Teildreiecke zerlegt)
- Entferne das mittlere der vier Teildreiecke (die anderen drei Teildreiecke bleiben übrig)
- Wende Schritte 2 und 3 auf die drei übriggebliebenen Teildreiecke an. usw.
Wir wollen das aber nicht grafisch lösen (zeichnen), sondern nur irgendwann mal darstellen. Also werden wir das mit dem Zeichnen hinten anstellen und uns rein um die Berechnung kümmern.
Da ist also
ein Dreieck und aus diesem Dreieck werden
drei Dreiecke berechnet.
Code:
Funktion SierpinskiDreieck( EinDreieck ) liefert DreiDreiecke
Um die Berechnung für eine gewisse Iterations-Tiefe zu erstellen, müssen wir die Schritte ja für jedes Dreieck wiederholen
Code:
Funktion Sierpinski( EinDreieck, Tiefe ) liefert ListeMitDreiecken
EinDreieck an NeueListe hängen
AktuelleTiefe ist 0
Solange AktuelleTiefe < Tiefe
AktuelleTiefe um 1 erhöhen
NeueListe in AktuelleListe kopieren
NeueListe leeren
Für alle Dreiecke in AktuelleListe
SierpinskiDreieck( AktuellesDreieck ) an NeueListe hängen
Ende Für
Ende Solange
NeueListe als Ergebnis zurückliefern
Diese Liste an Dreiecken kann dann als Grundlage zum Zeichnen verwendet werden.
Code:
ZeichneDreieck( Canvas, EinDreieck )
ZeichneDreiecksListe( Canvas, ListeMitDreiecken )
Für alle Dreiecke in ListeMitDreiecken
ZeichneDreieck( Canvas, AktuellesDreieck )
Ende Für
In dieser Zeichenroutine kann natürlich auch eine
Skalierung erfolgen um beliebig große Dreiecke auf einer beliebig großen Zeichenfläche darzustellen.