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
gestartetIm 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!
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.