Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lehrkraefte:blc:informatik:glf22:turtle [2023/01/12 09:35] Ivo Blöchliger [Funktionen] |
lehrkraefte:blc:informatik:glf22:turtle [2023/01/27 09:22] (current) Ivo Blöchliger [Pythagorasbaum] |
||
---|---|---|---|
Line 63: | Line 63: | ||
<hidden Lösungsvorschläge> | <hidden Lösungsvorschläge> | ||
- | Das kriegen Sie jetzt aber selber hin! | + | <code python 12-eck.py> |
+ | from kroete import Kroete | ||
+ | |||
+ | t = Kroete() | ||
+ | |||
+ | for i in range(12): | ||
+ | t.forward() | ||
+ | t.left(30) | ||
+ | |||
+ | </ | ||
+ | <code python 5zack.py> | ||
+ | from kroete import Kroete | ||
+ | |||
+ | t = Kroete() | ||
+ | |||
+ | for i in range(5): | ||
+ | t.forward(200) | ||
+ | t.left(144) | ||
+ | </ | ||
+ | <code python n-eck.py> | ||
+ | from kroete import Kroete | ||
+ | |||
+ | n=7 | ||
+ | |||
+ | t = Kroete() | ||
+ | for i in range(n): | ||
+ | t.forward() | ||
+ | t.left(360/ | ||
+ | |||
+ | </ | ||
+ | <code python n-zack.py> | ||
+ | from kroete import Kroete | ||
+ | |||
+ | n=11 # Anzahl Zacken | ||
+ | m=4 # Wie viele Zacken vorwärts (darf kein Teiler von n sein!) | ||
+ | |||
+ | t = Kroete() | ||
+ | for i in range(n): | ||
+ | t.forward(200) | ||
+ | t.left(m*360/ | ||
+ | </ | ||
</ | </ | ||
</ | </ | ||
Line 100: | Line 140: | ||
{{: | {{: | ||
</ | </ | ||
+ | |||
+ | ==== Kreis ==== | ||
+ | Folgende Funktion zeichnet Kreise wobei der Mittelpunkt der aktuellen Position der Turtle entspricht: | ||
+ | <code python> | ||
+ | def kreis(schildi, | ||
+ | schildi.save() | ||
+ | n = int(r) | ||
+ | w = 2*pi/ | ||
+ | s = r*sqrt(sin(w)**2+(1-cos(w))**2) | ||
+ | schildi.move(r) | ||
+ | schildi.left(90) | ||
+ | for i in range(n): | ||
+ | schildi.forward(s) | ||
+ | schildi.left(360/ | ||
+ | schildi.restore() | ||
+ | |||
+ | </ | ||
+ | |||
+ | <WRAP todo> | ||
+ | * Mathematisch gesprochen, was genau zeichnet die Funktion Kreis? | ||
+ | * Was genau ist die Segmentlänge und woher kommt diese Formel? Begründen Sie mit einer guten Skizze (//Die Herleitung gäbe ein wunderbare Trigo-Prüfungsaufgabe// | ||
+ | </ | ||
+ | |||
+ | ===== Rekursion ===== | ||
+ | Rekursion nennt man etwas, das mit sich selbst definiert wird (plus noch etwas, um zu beginnen). In der Informatik heisst das meist, dass sich eine Funktion selbst wieder aufruft. Dabei muss natürlich peinlichst darauf geachtet werden, dass sich die Funktion nicht unendlich oft selbst wieder aufruft. | ||
+ | |||
+ | ==== Koch-Kurve ==== | ||
+ | Die Koch-Kurve ist eine rekursiv definierte Kurve. | ||
+ | * Auf Stufe 0 ist die Kurve einfach eine Gerade | ||
+ | * Auf Stufe 1 ist die Kurve aus 4 gleich langen Geradenstücken aufgebaut, mit entsprechenden Winkeln | ||
+ | * Auf Stufe $n$ besteht die Kurve 4 Stücken der Stufe $n-1$, mit entsprechenden Winkeln dazwischen. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | <WRAP todo> | ||
+ | * Schreiben und testen Sie eine Funktion '' | ||
+ | * Schreiben und testen Sie eine Funktion '' | ||
+ | * Schreiben Sie dann eine Funktion '' | ||
+ | * Wie unterscheiden sich die Funktionen '' | ||
+ | * Anstatt jetzt noch eine Funktion '' | ||
+ | * Zusatzaufgabe: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Pythagorasbaum ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | <WRAP todo> | ||
+ | Um diesen Baum zu zeichnen, erstellen Sie erst eine Funktion '' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Die Funktion nimmt folgende Parameter entgegen: | ||
+ | * Eine Turtle '' | ||
+ | * Einen Winkel '' | ||
+ | * Die Turtle startet bei «Start» und muss am Ende bei «Ende» sein. Die Schrittlänge '' | ||
+ | * Sie können dazu auch die Turtle-Methoden '' | ||
+ | |||
+ | Hinweis: Sie können die Kathetenlängen mit trigonometrischen Funktionen aus '' | ||
+ | |||
+ | </ | ||
+ | |||
+ | <WRAP todo> | ||
+ | Erweitern Sie Ihre Funktion so, dass ein zusätzlicher Parameter '' | ||
+ | * Ist die '' | ||
+ | * Sonst wird anstelle des Zeichnens der Katheten die Funktion selbst mit '' | ||
+ | * Probieren Sie verschiedene Winkel aus. | ||
+ | * Anstatt die '' | ||
+ | * Man erhält einen interessanten Baum, wenn man statt einen konstanten Winkel '' | ||
+ | </ | ||
+ | |||
+ | <hidden Lösungsvorschlag> | ||
+ | <code python> | ||
+ | from kroete import Kroete | ||
+ | from math import cos,sin,pi | ||
+ | |||
+ | |||
+ | |||
+ | def baum(t, winkel, stufe): | ||
+ | t.save() | ||
+ | for i in range(4): | ||
+ | t.forward() | ||
+ | t.left(90) | ||
+ | t.left(90) | ||
+ | t.move() | ||
+ | a = cos(winkel/ | ||
+ | b = sin(winkel/ | ||
+ | t.right(90-winkel) | ||
+ | t.r = a | ||
+ | if stufe==0 or (stufe<0 and t.r<3): | ||
+ | t.forward() | ||
+ | else: | ||
+ | baum(t, winkel, stufe-1) | ||
+ | t.right(90) | ||
+ | t.r = b | ||
+ | if stufe==0 or (stufe<0 and t.r<3): | ||
+ | t.forward() | ||
+ | else: | ||
+ | baum(t, winkel, stufe-1) | ||
+ | t.restore() | ||
+ | t.move() | ||
+ | |||
+ | |||
+ | |||
+ | t = Kroete() | ||
+ | t.y = -200 | ||
+ | t.x = 50 | ||
+ | t.r = 110 | ||
+ | baum(t, 30, -1) | ||
+ | </ | ||
+ | </ |