4.4 Turtlegrafiken

Bild 143
Abbildung 1: Eine kunterbunte Turtlegrafik

Die Turtlegrafik geht auf die 1960er Jahre zurück.

  • Anfangs waren es schildkrötenartige Roboter, die auf am Boden liegenden Papierbögen fuhren und darauf mit Stiften Figuren zeichneten.
  • Später wurde die Programmiersprache LOGO entwickelt, deren wesentlicher Bestandteil die Turtlegrafik ist.

Python verfügt – ähnlich wie LOGO – über eine Turtlegrafik, bei der sich eine Turtle (Schildkröte) in einem Zeichenfenster bewegt und dabei Figuren zeichnet – wie z. B. den in der Abbildung 1 dargestellten Kreis.

Im Unterschied zu den Grafiken auf Seite 4., Seite 4.1, Seite 4.2 und Seite 4.3 ist allerdings beim Programmieren von Turtlegrafiken das Folgende zu beachten.

  • Obwohl der TurtleScreen auf dem Canvas-Widget platziert ist, unterscheidet sich sein Koordinatensystem vom dem des Canvas-Widgets.
Bild 145 Bild 146
Abbildung 2 und 3: Koordinatensysteme des TurtleScreens und des Canvas-Widgets[1]
  • Die Turtle zeichnet im Koordinatensystem des TurtleScreens und nicht in dem des Canvas-Widgets.

Das Koordinatensystem des TurtleScreen, das ist in der Abbildung 2 dargestellt ist:

  • besteht aus vier Quadranten
  • hat den Koordinatenursprung (0,0), der standardmäßig der Startpunkt der Turtle ist
  • hat die x-Achse, deren negativer Teil nach links (Westen) ausgerichtet ist und der positive Teil nach rechts (Osten)
  • hat die y-Achse, deren negativer Teil nach unten (Süden) ausgetrichtet ist und der positve Teil nach oben (Norden)

Programm »turtle1.py«

Zum Beginn des Zeichnens befindet sich die Turtle – wie in der Abbildung 4 dargestellt – in der Startposition:

  • im Koordinatenursprung (0,0), das heißt in der Mitte der Zeichenfläche
  • mit der Ausrichtung nach rechts (Osten)
Bild 131 Bild 132
Abbildung 4 und 5: Startposition der Turtle und Kreis der Turtle

Im Programm zeichnet die Turtle »schildi« den in der Abbildung 5 dargestellten Kreis.

Quelltext des Programms »turtle1.py«
import tkinter as tk
import turtle

# Funktion
def kreis():
    schildi.circle(80)

# grafische Benutzeroberfläche
root = tk.Tk()
root.title("Turtlegrafik")
root.resizable(False, False)

# Canvas-Widget
canvas = tk.Canvas (root, width=400, height=400)
canvas.pack(fill=tk.BOTH, expand=True)
# Turtle-Screen
turtle_screen=turtle.TurtleScreen(canvas)
schildi=turtle.RawTurtle(turtle_screen, shape="classic")

# Funktionsaufruf
kreis()

root.mainloop()

Erklärungen zum Quelltext
2. Zeile Das Standardmodul »turtle« wird in das Programm eingebunden.
  • Das Modul beinhaltet u. a. die Methode »circle« zum Zeichnen eines Kreises.
5. und 6. Zeile Die Funktion »kreis« wird deklariert.
  • Die Ausführung der Methode »schildi.circle(80)« bewirkt, dass die Turtle einen Kreis mit dem Radius 80 Pixel zeichnet.
9. und 11. Zeile Das Hauptfenster:
  • erhält den Titel »Turtlegrafik«
  • wird fixiert
14. und 15. Zeile Ein weißes Canvas-Widget wird erzeugt und als Element auf dem Hauptfenster platziert.
  • Dabei entspricht die Größe des Canvas-Widgets 400X400 Pixel aufgrund von »fill=tk.Both« und »expand=True« der Größe des Hauptfensters.
  • Bevor der Zeichenbereich der Turtle auf das Canvas-Widget gelegt werden kann (17. Zeile), muss das Canvas-Widget auf dem Hauptfenster platziert sein.
17. Zeile Der Zeichenbereich der Turtle wird wird auf dem Canvas-Widget erzeugt.
18. Zeile Die Turtle wird erzeugt.
  • Die Turtle wird auf dem »TurtleScreen« in der Mitte platziert.
  • Das Ausehen der Turtle wird als »classic« festgelegt.
  • Die Bezeichnung »schildi« ist ein Nickname für die Turtle.
21. Zeile Die Funktion »kreis« wird aufgerufen und dadurch ausgeführt.
Übung

Aufgabe A61

Implementiere das Programm »turtle1.py« am Computer.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

In der Tabelle sind einige Methoden – die die Turtl zum Zeichnen verwendet – und deren Erklärungen gegeben.

Tabelle 1: Methoden von RawTurtle
Methode Erklärung
circle(<Radiuus>) Kreis zeichnen
forward(<Pixel>) Linie vorwärts zeichnen
right(<Gradzahl>) Turtle dreht sich nach rechts
backward(<Pixel>) Linie rückwärts zeichnen
left(<Gradzahl>) Turtle dreht sich nach links
pensize(<Breite>) Breite der Linie
pencolor(<Farbe>) Farbe der Linien
hideturtle() Turtle unsichtbar machen

Programm »turtle2.py«

Im Programm soll die Turtle das in der Abbildung 6 dargestellte Quadrat zeichnen.

Bild 134
Abbildung 6:Turtle zeichnet ein Quadrat
Quelltext der Funktion »quadrat«
# Funktion
def quadrat():
    schildi.forward(150)
    schildi.right(90)
    schildi.forward(150)
    schildi.right(90)
    schildi.forward(150)
    schildi.right(90)
    schildi.forward(150)
    schildi.right(90)

Erklärungen zum Quelltext
3., 5., 7., 9. Zeile Die Aufrufe der Mathoden »schildi.forward(150)« bewirken, dass die Turtle die Seiten des Quadrats zeichnet.
  • Jede Seite hat die Länge 150 Pixel.
4., 6., 8., 10. Zeile Die Aufrufe der Mathoden »schildi.right(90)« bewirken, dass sich die Turtle um 90° im Uhrzeigersinn dreht.
  • Beim Zeichnen dreht sich die Turtle um die Außenwinkel des Quadrats.
    Bild 135
    Abbildung 4: Drehungen um die Außenwinkel des Quadrats

Aufgrund der viermaligen Aufrufe von »schildi.forward(150)« und »schildi.right(90)« zeichnet die Turtle das Quadrat mit den Seitenlängen 150 Pixel und befindet sich dann wieder in der Startposition.

Übung

Aufgabe A62

Implementiere die Funktion »rechteck« in einem Programm »turtle2.py« am Computer.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Übung

Aufgabe A63

Führe auf einem Zeichenblatt mit Linieal, Winkelmesser und Stift das Folgende aus:

  • zeichne in die Mitte des Zeichenblatts einen Punkt, der die Startposition der nach rechts (Osten) ausgerichteten Turtle sein soll
  • auf dem Zeichenblatt zeichnest du vom Punkt aus das, was die Turtle in der Funktion »:was1« zeichnet, wobei jede Linie 5cm lang sein soll
Quelltext der Funktion »was1«
# Funktion
def was1():
    schildi.forward(50)
    schildi.right(60)
    schildi.forward(50)
    schildi.right(60)
    schildi.forward(50)
    schildi.right(60)

Was für eine Figur zeichnet die Turtle in der Funktion »was1«?



Führe auf der Rückseite des Zeichenblatts mit Linieal, Winkelmesser und Stift das Folgende aus:

  • zeichne in die Mitte des Zeichenblatts einen Punkt, der die Startposition der nach rechts (Osten) ausgerichteten Turtle sein soll
  • auf dem Zeichenblatt zeichnest du vom Punkt aus das, was die Turtle in der Funktion »:was2« zeichnet, wobei jede Linie 5cm lang sein soll
Quelltext der Funktion »was2«
# Funktion
def was2():
    schildi.forward(50)
    schildi.right(120)
    schildi.forward(50)
    schildi.right(120)
    schildi.forward(50)
    schildi.right(120)

Was für eine Figur zeichnet die Turtle in der Funktion »was2«?

Programm »turtle3.py«

Das mehrfache Aufschreiben von »schildi.forward(150)« und »schildi.right(90) in der Funktion »quadrat« des Programms »turtle2.py« kann durch die for-Schleife (siehe Seite 3.3) verkürzt werden.

Quelltext der Funktion »quadrat«
# Funktion
def quadrat():
    for i in range(1, 5):
        schildi.forward(150)
        schildi.right(90)

Erklärungen zum Quelltext
3. bis 5. Zeile Die for-Schleife bewirkt, dass der Laufvariable »i« im Schleifenkopf nacheinander die Werte 1, 2, 3 und 4 des Bereichs »range(1, 5)« zugewiesn werden.
  • Mit jeder Wertzuweisung werden nacheinander im Schleifenkörper die Methoden »schildi.forward(150)« und »schildi.right(90)« ausgeführt. Das heißt, dass die beiden Methoden insgesamt viermal nacheinander ausgeführt werden.
Übung

Aufgabe A64

Implementiere die Funktion »quadrat« mit der for-Schleife im Programm »turtle3.py« am Computer.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Programm »turtle4.py«

Im Programm »turtle.4« soll die Turtle die in der Abbildung 5 dargestellte Figur zeichnen.

Bild 136
Abbildung 5: Turtle zeichnet
Übung

Aufgabe A65

Implementiere das Programm »turtle4.py« am Computer, sodass die Turtle die in der Abbildung 5 dargestellte Figur zeichnet.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Programm »turtle5.py«

Übung

Aufgabe A66

Zeichne auf einem Zeichenblatt frei Hand einen fünfzackigen Stern:

Bild 137
Abbildung 5: Stern mit fünf Zacken handgezeichnet
  • beginne an einem Zacken zu zeichnen und setze den Stift dabei nicht ab
  • die Linien sollen sich beim Zeichen schneiden
  • beende das Zeichnen an dem Zacken, an dem du begonnen hast

Im Programm »turtle5.py« zeichnet die Turtle den in der Abbildung 6 dargestellten fünfzackigen Stern (Fünfzack).

Bild 138
Abbildung 6: Turtle zeichnet einen Stern mit fünf Zacken
Quelltext der Funktion »fuenfzack«
# Funktion
def fuenfzack():
    for i in range(1, 6):
        schildi.forward(190)
        schildi.right(144)

Erklärungen zum Quelltext
3. bis 5. Zeile Der Schleifenkörper der for-Schleife wird fünfmal nacheinander ausgeführt.
Übung

Aufgabe A67

Implementiere die Funktion »fuenfzack« im Programm »turtle5.py« am Computer, sodass die Turtle den in der Abbildung 6 dargestellten Stern zeichnet.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Programm »turtle6.py«

Die Turtlegrafiken sehen schöner aus, wenn sie auf einem farbigen Hintergrund mit mit breiteren farbigen Linien gezeichnet werden.

In der Abbildung 7 ist der von der Turtle gezeichnet neunzackige Stern dargestellt.

Bild 142
Abbildung 7: Turtle zeichnet einen neunzackigen Stern
Quelltext der Funktion »neunzack«
import tkinter as tk
import turtle

# Funktion
def neunzack():
	schildi.pensize(3)
	schildi.pencolor("blue")
    for i in range(1, 10):
        schildi.forward(190)
        schildi.right(160)
 
root = tk.Tk()
root.title("Turtlegrafik")
root.resizable(False, False)

canvas = tk.Canvas (root, width=400, height=400)
canvas.pack(fill=tk.BOTH, expand=True)
turtle_screen=turtle.TurtleScreen(canvas)
turtle_screen.bgcolor("yellow")
schildi=turtle.RawTurtle(turtle_screen, shape="classic")

# Funktionsaufruf
neunzack()

root.mainloop()

Erklärungen zum Quelltext
6. Zeile Die Breite der von der Turtle gezeichneten Linien bertägt 3 Pixel.
7. Zeile Die Farbe der Linien ist blau.
8. bis 10. Zeile Mit Hilfe der for-Schleife wird der Stern gezeichnet.
19. Zeile Der Zeichenbereich der Turtle auf dem Canvas-Widget wird gelb gefärbt.
Übung

Aufgabe A68

Übertrage den Quelltext als Programm »turtle6.py« auf den Computer.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Programm »turtle7.py«

Eine Rosette entsteht, wenn eine Figur wiederholt an einem Punkt der Zeichenfläche um einen Winkel gedreht von der Turtle gezeichnet wird.

In der Abbildung 8 ist eine Rosette dargestellt, die aus sechs durch Drehung um den Startpunkt der Turtle versetzt gezeichneten Kreisen besteht.

Bild 139
Abbildung 8: Turtle zeichnet eine Rosette aus Kreisen

Im Programm »turtle6.py« zeichnet die Turtle in der Funktion »kreisrosette« die in der Abbildung 8 dargestellte Rosette.

Der Zeichenbereich der Turtle auf dem Canvas-Widget ist blau.

Quelltext der Funktion »kreisrosette«
# Funktion
def kreisrosette():
    schildi.pensize(3)
    schildi.pencolor("white")
    for i in range(6):
        schildi.circle(80)
        schildi.right(60)

Übung

Aufgabe A69

Implementiere das Programm »turtle7.py« am Computer, sodass die Turtle die in der Abbildung 8 dargestellte Rosette zeichnet.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Programm »turtle8.py«

In der Abbildung 9 ist eine Rosette aus jeweils zehnmal um den Startpunkt der Turtle gedreht gezeichneten gleichseitigen Dreiecken dargestellt.

Bild 140
Abbildung 9: Turtle zeichnet eine Rosette aus Dreiecken

Der Zeichenbereich der Turtle auf dem Canvas-Widget ist schwarz.

Quelltext der Funktion »dreieckrosette«
# Funktion
def dreieckrosette():
    schildi.pensize(3)
    schildi.pencolor("yellow")
    # äußere for-Schleife
    for i in range(1, 11):
        # innere for-Schleife
        for j in range(1, 4):
            schildi.forward(160)
            schildi.right(120)
        schildi.right(36)

Erklärungen zum Quelltext
3. und 4. Zeile Die Breite der von der Turtle gezeichneten Linien bertägt 3 Pixel.
Die Farbe der Linien ist gelb.
4. bis 9. Zeile Aufgrund der äußeren und inneren for-Schleife erfolgt zehnmal nacheinander das Zeichnen eines um jeweils 36° um den Startpunkt der Turtle gedrehten gleichseitigen Dreiecks.
Übung

Aufgabe A70

Implementiere ein Programm »turtle8.py« am Computer, sodass die Turtle die in der Abbildung 9 dargestellte Rosette zeichnet.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Programm »turtle9.py«

Übung

Aufgabe A71

Implementiere ein Programm »turtle9.py« am Computer, sodass die Turtle eine Rosette auf einem grünen Zeichenbereich des Canvas-Widget zeichnet.

  • Die Rosette soll aus neun Quadraten bestehen.
  • Die Breite der von der Turtle gezeichneten Linien soll 3 Pixel betragen.
  • Die Farbe der Linien soll schwarz sein.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Programm »turtle10.py«

In der Abbildung 10 ist eine Rosette aus jeweils viermal um den Startpunkt der Turtle gedreht gezeichneter neunzackiger Stern dargestellt.

Bild 141
Abbildung 10: Turtle zeichnet eine Rosette aus Sternen

Der Zeichenbereich der Turtle auf dem Canvas-Widget ist orange.

Quelltext der Funktion »sternrosette«
def sternrosette():
    schildi.pensize(3)
    schildi.pencolor("green")
    # äußere for-Schleife
    for i in range(1, 5):     
        # innere for-Schleife
        for i in range(1, 10):
            schildi.forward(160)
            schildi.right(160)
        schildi.right(90)   

Erklärungen zum Quelltext
2. und 3. Zeile Die Breite der von der Turtle gezeichneten Linien bertägt 3 Pixel.
Die Farbe der Linien ist grün.
5. bis 10. Zeile Die äußere und innere for-Schleife zeichnen die Rosette aus vier neunzackigen Sternen.
Übung

Aufgabe A72

Implementiere das Programm »turtle10.py« am Computer, sodass die Turtle die in der Abbildung 10 dargestellte Rosette zeichnet.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Programm »turtle11.py«

Bild 133
Abbildung 11: Turtle zeichnet eine Rosette
Übung

Aufgabe A73

Implementiere ein Programm »turtle11.py« am Computer, sodass die Turtle die in der Abbildung 11 dargestellte Rosette zeichnet.

Führe das Programm aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Programm »turtle12.py«

Gegeben ist der Quelltext des Programms »turtle12.py«, in dem die Turtle eine Figur zeichent.

Quelltext des Programms »turtle12.py«
import tkinter as tk
import turtle
import random

farbe=["red", "green", "blue", "orange", "yellow", "pink"]

# Funktion
def zeichnen():
    global liste
    schildi.pensize(3)
    # äußere for-Schleife
    for i in range(1, 11):
        schildi.pencolor(random.choice(farbe))
        # innere for-Schleife
        for j in range(1, 9):
            schildi.forward(60)
            schildi.right(45)
        schildi.right(36)
 
root = tk.Tk()
root.title("Turtlegrafik")
root.resizable(False, False)

canvas = tk.Canvas (root, width=400, height=400)
canvas.pack(fill=tk.BOTH, expand=True)
turtle_screen=turtle.TurtleScreen(canvas)
turtle_screen.bgcolor("black")
schildi=turtle.RawTurtle(turtle_screen, shape="classic")

# Funktionsaufruf
zeichnen()

root.mainloop()

Übung

Aufgabe A73

Übertrage den Quelltext als Programm »turtle12.py« auf den Computer.

Führe das Programm mehrmals aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Was für eine Figur zeichnet die Turtle im Programm?

Übung

Aufgabe A74

Wie viel Grad beträgt der Winkel, um den sich die Turtle jeweils beim Zeichnen eines 12-Ecks im Uhrzeigersinn drehen muss?

  1. 36°
  2. 72°
  3. 30°
  4. 60°

  1. [1] Die angegebenen Koordinaten beziehen sich auf Zeichenflächen von 400x400 Pixel.