AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sierpinski Dreieck mit Lazarus

Ein Thema von ThePhilosopher · begonnen am 22. Nov 2013 · letzter Beitrag vom 23. Nov 2013
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: Sierpinski Dreieck mit Lazarus

  Alt 23. Nov 2013, 11:05
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:
  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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr.
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