====== Sierpinski-Dreieck ====== ===== Gleichseitiges Sierpinski-Dreieck ===== Ein einfaches [[https://de.wikipedia.org/wiki/Sierpinski-Dreieck|Sierpinski-Dreieck]] setzt sich rekursiv aus drei **gleichseitigen** Dreiecken halber Seitenlängen zusammen solange die Seitenlängen größer als eine minimale Länge ''m'' sind: {{ :faecher:informatik:oberstufe:algorithmen:rekursion:uebungen02:sierpinski_dreieck:sierpinski.gif?nolink |}} {{ :faecher:informatik:oberstufe:algorithmen:rekursion:uebungen02:sierpinski_dreieck:spierp.png |}} Im Folgenden soll zunächst die Methode ''zeichneSierpinskiGleichseitig(int laenge, int m)'' implementiert werden. Die Grundseite der Dreiecke soll dabei parallel zur x-Achse ausgerichtet sein. Verwende weiter die Vorlage aus [[..:einfuehrung:start| der Einführung in die Turtle Grafik]]. ---- {{:aufgabe.png?nolink |}} === (A1) === * Welche Bedingung ist maßgeblich, dass der Basisfall eintritt. Welche Operation muss der Algorithmus im Basisfall ausführen? * Wenn der Basisfall nicht zutrifft, müssen drei Dreiecke gezeichnet werden, indem sich die Methode rekursiv selbst aufruft. Vor jedem Aufruf muss der Startpunkt neu berechnet werden und die Turtle mit ''t.setPos(X,Y)'' an den berechneten Startpunkt gesetzt werden. Mit welchen Parametern muss sich die Methode selbst aufrufen? {{ :faecher:informatik:oberstufe:algorithmen:rekursion:uebungen02:sierpinski_dreieck:sierpinski_gleichseitig.svg?nolink |}} ++++ Hilfestellung (Codegerüst mit Lücken) | {{ :faecher:informatik:oberstufe:algorithmen:rekursion:uebungen02:sierpinski_dreieck:s1_hilfe.png?nolink |}} ++++ ===== Beliebige Sierpinski-Dreiecke ===== Wenn man beliebige Sierpinski-Dreiecke zeichnen möchte, ändert sich am Prinzip der Rekursion nichts, allerdings muss man das Dreieck anders beschreiben, beispielsweise durch die Koordinaten seiner Eckpunkte. Es genügt jetzt auch nicht mehr, lediglich die Startpunkte der rekursiv gezeichneten Dreiecke zu bestimmen, sondern man muss die Eckpunkte dieser Dreiecke bestimmen, das ist etwas aufwändiger. Die Methodensignatur sieh in diesem Fall also so aus: ''zeichneSierpinskiBeliebig(x1,y1,x2,y2,x3,y3,m)'' {{ :faecher:informatik:oberstufe:algorithmen:rekursion:uebungen02:sierpinski_dreieck:sierpinski_allgemein.svg |}} ---- {{:aufgabe.png?nolink |}} === (A2) === * Überlege dir auch hier welche Bedingung den Basisfall definiert. * Implementiere in deiner Methode, dass das Dreieck mit den Eckpunkten ''P(x1|y1)'', ''Q(x2|y2)'' und ''R(x3|y3)'' gezeichnet wird. * Überlege dir, wie man die fehlenden Eckpunkte der orangenen Dreiecke mithilfe der Koordinaten ''x1'', ''y1'', ''x2'', ''y2'', ''x3'' und ''y3'' in der Abbildung bestimmen kann. * Ergänze deine Methode auf Basis dieser Überlegungen um geeignete Selbstaufrufe und implementiere die Methode. Geeignete Eckpunkte sind z.B. ''(0|0)'' ''(200|0)'' ''(100|174)'', eine geeignete minimale Seitenlänge für diese Koordinaten ist zwischen 5 und 10. ++++ Lösungsvorschlag Codegerüst mit Lücken | {{ :faecher:informatik:oberstufe:algorithmen:rekursion:uebungen02:sierpinski_dreieck:s2_hilfe.png?nolink |}} ++++