Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Sierpinski Dreieck mit Lazarus (https://www.delphipraxis.net/177715-sierpinski-dreieck-mit-lazarus.html)

Sir Rufo 23. Nov 2013 11:05

AW: Sierpinski Dreieck mit Lazarus
 
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:

Zitat von Wikipedia: Sierpinski-Dreieck
  1. Zeichne ein Dreieck („Initiator“)
  2. Verbinde die Mittelpunkte der Seiten („Generator“) (dadurch wird das ursprüngliche Dreieck in vier deckungsgleiche Teildreiecke zerlegt)
  3. Entferne das mittlere der vier Teildreiecke (die anderen drei Teildreiecke bleiben übrig)
  4. 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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz