This is an old revision of the document!
Grundlagen mit Turtle
Grundidee: Ein Schildkröte (Turtle) befindet sich auf dem Bildschirm an einer bestimmten Position $(x,y)$ und schaut in eine bestimmte Richtung (festgelegt durch einen Winkel $\alpha$ wie im Einheitskreis).
Die Turtle kann sich vorwärts bewegen (forward
) dabei zeichnen (oder nicht mit move
) und sich drehen mit left
oder right
.
Damit können recht einfach spannende Grafiken gezeichnet werden.
Setup
Legen Sie einen neuen Ordner an (z.B. mit dem Namen 'turtle').
Speichern Sie darin folgende minimale Turtleklasse: kroete.py
Speichern Sie im gleichen Ordner folgendes Test-Programm: turtletest.py
Testen Sie das Test-Programm und versuchen Sie es zu verstehen.
Mathematik hinter der Turtle
Soll von einem Punkt $(x,y)$ weiter in die Richtung vom Winkel $\alpha$ gegangen werden, muss also in die Richtung vom Vektor $\begin{pmatrix}\cos(\alpha)\\ \sin(\alpha) \end{pmatrix}$ gegangen werden. Dieser Vektor entspricht der Verschiebung des Nullpunkts zum Punk $P_{\alpha}$ auf dem Einheitskreis.
Wenn die Schrittlänge $r$ ist, reicht es, beide Einträge vom Vektor mit $r$ zu multiplizieren. Der neue Punkt hat also die Koordinaten $$ \left(x + r \cdot \cos(\alpha),\,\, y+ r \cdot \sin(\alpha)\right) $$
Finden Sie den der obigen Formel ensprechenden Python-Code in der Datei kroete.py
.
Aufgaben
- Ändern Sie den Code in
turtletest.py
so ab, dass anstatt des Dreiecks ein blaues Quadrat gezeichnet wird.
For-Schlaufen
Mit For-Schlaufen werden Programmblöcke wiederholt. Dabei wird eine Laufvariable hochgezählt (bzw. läuft die Werte in einer Liste durch).
for i in range(10): # 10 Wiederholungen, i läuft von 0 bis und mit 9 print(i) if i%2 == 0: # i%2 ist der Rest der Division durch zwei, also 0 oder 1. print("gerade") print("Das wird nicht wiederholt")
Schreiben Sie je ein Programm mit For-Schleifen, das mit der Turtle folgende Dinge zeichnet:
- Ein regelmässiges 12-Eck
- Ein 5-Zack-Stern
- Ein regelmässiges $n$-Eck, wobei $n$ als Variable am Anfang im Code festgelegt werden kann.
- Ein $n$-Zack-Stern, wobei $n$ als Variable am Anfang im Code festgelegt werden kann.
- Bonus-Aufgabe: Zentrieren Sie das $n$-Eck bzw. den $n$-Zack-Stern.
Für die Bonus-Aufgabe wird wohl der Radius vom $n$-Eck benötigt (oder umgekehrt die Seitenlänge aus dem Radius berechnet). Dazu werden die trigonometrischen Funktionen gebraucht:
# Die Funktionen Cosinus und Sinus sowie die Konstante pi importieren from math import cos,sin,pi w=30 print(f"cos({w})={cos(w/180*pi)}, sin({w})={sin(w/180*pi)}")