4.4 Turtlegrafiken
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.
- 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 nachrechts (Osten) -
hat die y-Achse, deren negativer Teil nach
unten (Süden) ausgetrichtet ist und der positve Teil nachoben (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)
Im Programm zeichnet die Turtle »schildi« den in der Abbildung 5 dargestellten Kreis.
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()
| 2. Zeile |
Das Standardmodul »turtle« wird in das Programm eingebunden.
|
| 5. und 6. Zeile |
Die Funktion »kreis« wird deklariert.
|
| 9. und 11. Zeile |
Das Hauptfenster:
|
| 14. und 15. Zeile |
Ein weißes Canvas-Widget wird erzeugt und als Element auf dem Hauptfenster platziert.
|
| 17. Zeile | Der Zeichenbereich der Turtle wird wird auf dem Canvas-Widget erzeugt. |
| 18. Zeile |
Die Turtle wird erzeugt.
|
| 21. Zeile | Die Funktion »kreis« wird aufgerufen und dadurch ausgeführt. |
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.
| 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.
# 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)
| 3., 5., 7., 9. Zeile |
Die Aufrufe der Mathoden »schildi.forward(150)« bewirken, dass die Turtle die Seiten des Quadrats
zeichnet.
|
| 4., 6., 8., 10. Zeile |
Die Aufrufe der Mathoden »schildi.right(90)« bewirken, dass sich die Turtle um 90° im Uhrzeigersinn
dreht.
|
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.
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.
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
# 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
# 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.
# Funktion
def quadrat():
for i in range(1, 5):
schildi.forward(150)
schildi.right(90)
| 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.
|
Aufgabe A64
Implementiere die Funktion »quadrat« mit der for-Schleife im Programm
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.
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«
Aufgabe A66
Zeichne auf einem Zeichenblatt frei Hand einen fünfzackigen Stern:
- 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).
# Funktion
def fuenfzack():
for i in range(1, 6):
schildi.forward(190)
schildi.right(144)
| 3. bis 5. Zeile | Der Schleifenkörper der for-Schleife wird fünfmal nacheinander ausgeführt. |
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.
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()
| 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. |
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.
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.
# Funktion
def kreisrosette():
schildi.pensize(3)
schildi.pencolor("white")
for i in range(6):
schildi.circle(80)
schildi.right(60)
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.
Der Zeichenbereich der Turtle auf dem Canvas-Widget ist schwarz.
# 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)
| 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. |
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«
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.
Der Zeichenbereich der Turtle auf dem Canvas-Widget ist orange.
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)
| 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. |
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«
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.
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()
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?
Aufgabe A74
Wie viel Grad beträgt der Winkel, um den sich die Turtle jeweils beim Zeichnen eines
- 36°
- 72°
- 30°
- 60°
- [1] Die angegebenen Koordinaten beziehen sich auf Zeichenflächen von 400x400 Pixel.