Zeichnen mit Funktionen
Zum Abschluss der Funktionen probieren wir noch einmal aus, wie man auch beim Zeichnen mit gturtle eigene Funktionen nutzen kann.
Erinnerst du dich, wie man ein Quadrat zeichnet? Es werden da einfach vier Linien von gleicher Länge gemalt, nach jeder Linie dreht sich die Schildkröte um 90 Grad nach rechts. Machen wir eine Funktion draus:
def quadrat(laenge):
repeat 4:
forward(laenge)
right(90)
So – mit dieser Funktion kannst du jetzt jederzeit ein Quadrat mit beliebiger Seitenlänge zeichnen.
from gturtle import *
makeTurtle()
quadrat(100)
Das zeichnet ein Quadrat mit der Seitenlänge 100 Pixel von der Stelle an, wo die Schildkröte gerade steht.
Ein Dreieck könnte man ebenso als Funktion definieren.
def dreieck(laenge):
repeat 3:
forward(laenge)
right(120)
Das macht genau dasselbe wie vorher, nur für ein Dreieck.
Wie wäre es jetzt mit einer universellen Funktion? Also einer Vieleckfunktion, die Dreiecke, Vierecke, Fünfecke, Sechsecke usw. zeichnen könnte? Das hatten wir in Kapitel 12 auch schon einmal – nur dass wir es jetzt als Funktion definieren.
Diesmal brauchen wir zwei Parameter, die wir der Funktion mitgeben – einmal die Anzahl der Ecken und einmal die Länge der Seiten.
def vieleck(ecken,laenge):
winkel = 360/ecken
repeat ecken:
forward(laenge)
right(winkel)
Der erforderliche Winkel wird berechnet, indem man eine ganze Umdrehung (360 Grad) durch die Anzahl der Ecken teilt, daraus ergibt sich der Rest.
Nun kannst du ein Programm schreiben, das 100 Zufallsobjekte zeichnet. Jedes Objekt hat zwischen 3 und 7 Ecken und eine Seitenlänge zwischen 10 und 100. Auch die Position und die Farbe können zufällig gesetzt werden (mit den Funktionen von gturtle). Und zum Zeichnen wird einfach immer nur die Funktion vieleck() verwendet. Versuche mal, so ein Programm zu schreiben. Erst mal nur in ganz einfacher Fassung, dann kannst du es weiter ausbauen.
from gturtle import *
from random import randint
def vieleck(ecken,laenge):
winkel = 360/ecken
repeat ecken:
forward(laenge)
right(winkel)
makeTurtle()
hideTurtle()
penWidth(3)
repeat 100:
setPenColor(getRandomX11Color()) # Zufallsfarbe setzen
setRandomHeading() # zufällige Startrichtung setzen
setRandomPos(800, 600) # zufällige Startposition setzen
laenge = randint(10,100) # zufällige Kantenlänge setzen
ecken = randint(3,7) # zufällige Anzahl Ecken
vieleck(ecken,laenge)
Diese Variante ist zum Beispiel eine Möglichkeit. Hier verwenden wir auch den Befehl setRandomHeading() = Zufallsrichtung setzen und penWidth(3) = Stiftdicke. Damit es schöner aussieht. Aber du kannst es selbst machen, wie du möchtest. Am Ende gibt es jedenfalls ein buntes Bild voll verschiedener Figuren.
Abbildung 13.2 Moderne Kunst? Zufällige Vielecke in verschiedenen Farben, Positionen und Winkeln