Sierpinskis Triangle Pygame Recursive

9

Für meine aktuelle Universitätsarbeit sollen wir also ein Sierpinksi Dreieck erstellen und rekursiv neue Dreiecke hineinzeichnen.

Der ursprüngliche Code, den wir bekommen haben, war folgender:

%Vor%

Ok ich weiß, dass dies nur ein einziges Dreieck erzeugt. Hier ist, was ich getan habe, damit es "irgendwie" funktioniert:

Ich habe eine neue Dreiecksfunktion erstellt, um ein umgekehrtes Dreieck zu zeichnen:

%Vor%

Dann habe ich die alte Dreiecksfunktion aktualisiert, um eine Farbvariable zu akzeptieren:

%Vor%

Danach habe ich die Hauptfunktion aktualisiert, die rekursiv Dreiecke zeichnet:

%Vor%

Ich habe die Funktion aus

gestartet
  1. Wenn Sie das Argument exit hinzufügen (wenn das Dreieck zu klein ist, geben Sie false zurück)
  2. Wenn es nicht zu klein ist, zeichne das erste Dreieck in weiß
  3. Zeichnen Sie danach ein umgekehrtes Dreieck, das halb so groß ist wie die x-Stelle, aber die Hälfte der y-Stelle in schwarz (das erzeugt die Drei-Dreieck-Illusion)
  4. Nach all dem habe ich 4 rekursive Aufrufe, basierend auf Experimenten weiß ich, dass die Reihenfolge dieser Aufrufe wichtig ist, da sich die Ausgabe beim Ändern radikal ändert.

Im Moment ist die aktuelle Ausgabe wie folgt:

Ich fordere niemanden auf, meinen Code zu vervollständigen oder zu korrigieren, nur ein besseres Verständnis oder ein Punkt in die richtige Richtung. Habe ein paar Stunden mit diesem gekämpft.

Danke!

    
Tiaan Swart 02.08.2015, 23:15
quelle

1 Antwort

3

Sieh dir den folgenden Link an, der Sierpinskis Dreieck implementiert ...

Ссылка

Viele gute Diskussionen rund um das Problem und 40 Zeilen Code, um es zu implementieren.

Auch wegen der Funktionsweise des Turtle-Moduls können Sie sehen, wie jedes Dreieck einzeln gezeichnet wird. Dies ist sehr hilfreich, wenn Sie den Code überprüfen, da Sie die Rekursionsebenen und deren Auftreten visualisieren können. Ich weiß nicht, wie schwer dies in pygame zu implementieren wäre, aber wenn Sie die Dreiecks-Erstellung verlangsamen können, macht es das Verständnis der Logik viel einfacher.

Sie sagen, Sie benötigen die 4 rekursiven Aufrufe auf der Basis eines Tests, aber können Sie die Logik dahinter erklären? Intuitiv erscheint das falsch, da Sie nur drei neue Dreiecke plus ein teilweise gedecktes Elternteil benötigen, um vier kleineren gleichseitigen Dreiecken zu entsprechen. (Sehen Sie, wie das in der Verbindung gemacht wird?)

Können Sie erklären, warum Sie eine umgekehrte Dreiecksmethode verwenden? Das scheint so etwas wie ein fehleranfälliges Problem zu sein? Sie sollten in der Lage sein, die umgekehrten Dreiecke mit negativem Abstand von Ihrer normalen Dreiecksfunktion zu zeichnen. In der Verknüpfung sehen Sie, dass der Autor ein grünes Dreieck in die gleiche Richtung wie alles andere zeichnet, aber später mit mehr Dreiecken bedeckt, bis der grüne in die entgegengesetzte Richtung zeigt.

Alles in allem sieht es so aus, als wären Sie in der Nähe. Sie müssen nur das letzte Stück Rekursionslogik richtig machen.

P.S.

Eine kleinere Nebenstilkritik - nur weil diese in Python geschrieben ist und Lesbarkeit zählt. Sie können While True und dann break verwenden, um die zusätzliche Variable done zu vermeiden.

    
abaldwin99 03.08.2015, 00:39
quelle

Tags und Links