lehrkraefte:blc:informatik:glf22:turtle

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.

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.

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.

  • Ändern Sie den Code in turtletest.py so ab, dass anstatt des Dreiecks ein blaues Quadrat gezeichnet wird.

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")

Mehr Beispiele dazu

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)}")

Lösungsvorschläge

Lösungsvorschläge

Das kriegen Sie jetzt aber selber hin!

Wie bereits gesehen, bieten sich Funktionen an, ein Programm in kleine Unterprogramme zu zerlegen.

Funktionen können (müssen aber nicht) mit return Werte zurückgeben. Ein return beendet die Funktion sofort.

Funktionen können beliebig viele Parameter (bzw. Argumente) entgegennehmen.

Beispiel:

from kroete import Kroete
 
# Definition der Funktion quadrat, wird nicht direkt ausgeführt.
def quadrat(schildi, s):
    """Zeichnet ein Quadrat mit der Turtle schildi und Seitenlänge s"""
    for i in range(4):
        schildi.forward(s)
        schildi.left(90)
 
t = Kroete()
# Aufruf der Funktion. schildi wird dann zu t, s zu 200
quadrat(t, 200)

Mit Hilfe der oben definierten Funktion quadrat erstellen Sie (in ungefähr) folgendes Bild (lässt sich in etwa 3 zusätzlichen Zeilen realisieren):

20230112-091916.png_400

Oder mit einer zusätzlichen Zeile kann noch die Farbe berechnet werden, mit t.rgb(rot, gruen, blau), wobei rot, gruen und blau ganze Zahlen zwischen 0 und 255 sind:

20230112-093411.png_200

  • lehrkraefte/blc/informatik/glf22/turtle.1673512474.txt.gz
  • Last modified: 2023/01/12 09:34
  • by Ivo Blöchliger