Basisvormen in een functie

Op deze pagina gaan we leren hoe je het tekenen van basisvormen in een functie zetten.
Je kunt de vorm dan steeds opnieuw tekenen zonder steeds de hele code opnieuw te typen.

We beginnen met het definieren van een functie met de naam rechthoek.
In deze code brengen we turtle naar de juiste positie zonder dat hij een lijn tekens vanaf het beginpunt; penup – goto en pendown. 

In de functie leten we turtle een rechthoek tekenen van 300 pixels breed en 70 pixels hoog.

Tenslotte roepen we de functie aan om de turtle ook echt te laten tekenen.

				
					def rechthoek():
    t.penup()
    t.goto(-150,35)
    t.pendown()

    t.forward(300)
    t.right(90)
    t.forward(70)
    t.right(90)
    t.forward(300)
    t.right(90)
    t.forward(70)

rechthoek()
				
			

Variabelen meesturen als parameter

Op deze pagina gaan we leren hoe je het tekenen van basisvormen in een functie zetten.
Je kunt de vorm dan steeds opnieuw tekenen zonder steeds de hele code opnieuw te typen.

De code

Op regel 1 zie je dat er een variabele breedte is aangemaakt die als waarde 300 heeft gekregen.

Op regel 16 wordt bij het aanroepen van de functie de waarde 300 meegestuurd als parameter.

Op regel 3 ontvangt de functie de parameter met de naam b.

 Op regel 8 en 12 wordt de waarde gebruikt om de rechthoek de juiste breedte te geven.

				
					breedte = 300
    
def rechthoek(b):
    t.penup()
    t.goto(-150,35)
    t.pendown()

    t.forward(b)
    t.right(90)
    t.forward(70)
    t.right(90)
    t.forward(b)
    t.right(90)
    t.forward(70)

rechthoek(breedte)
				
			

Meer parameters

Als we de breedte van de rechthoek als parameter kunnen meesturen, kunnen we ook de hoogte en de positie meesturen.
In de code hieronder worden er 4 variabelen meegestuurd.
Let er altijd op dat de parameters bij het verzenden en het ontvangen dezelfde volgorde hebben.

				
					breedte = 300
hoogte = 90
x_pos = -150
y_pos = 35
    
def rechthoek(b, h, x, y):
    t.penup()
    t.goto(x,y)
    t.pendown()

    t.forward(b)
    t.right(90)
    t.forward(h)
    t.right(90)
    t.forward(b)
    t.right(90)
    t.forward(h)

rechthoek(breedte, hoogte, x_pos, y_pos)
				
			

De kracht van functies

Nu je eenmaal een vorm hebt beschreven in een functie, kun je die functie zo vaak hergebruiken als je wilt.
We gaan het aanroepen van de functie in een for-loop zetten.

Om het script wat leesbaarder te maken zijn de variabelenamen breedte en hoogte wat korter gemaakt.

In de for-loop wordt nu geregeld dat de functie rechthoek 2 keer aangeroepen wordt.

Nadat de functie de eerste keer is aangeroepen worden de waardes van de 4 variabelen veranderd.
De tweede rechthoek krijgt dus andere afmetingen en een andere positie.

Als je het resultaat goed bekijkt zul je opmerken dat bij de tweede rechthoek de breedte en de hoogte verwisseld zijn.
Dat komt omdat turtle bij het begin van deze rechthoek nog in de eindpositie van de eerste rechthoek staat.
Dat kunnen we corrigeren door ale eerste opdracht in de functie de regel: t.setheading(0) toe te voegen.
Turtle draait dan voordat hij begint te tekenen weer naar rechts.

Foutje.......setheading()

Foutje…….

Als je het resultaat goed bekijkt zul je opmerken dat bij de tweede rechthoek de breedte en de hoogte verwisseld zijn.
Dat komt omdat turtle bij het begin van deze rechthoek nog in de eindpositie van de eerste rechthoek staat.
Dat kunnen we corrigeren door ale eerste opdracht in de functie de regel: t.setheading(0) toe te voegen.
Turtle draait dan voordat hij begint te tekenen weer naar rechts.

				
					br = 300
ho = 90
x_pos = -150
y_pos = 35
    
def rechthoek(b, h, x, y):
    t.penup()
    t.goto(x,y)
    t.pendown()

    t.forward(b)
    t.right(90)
    t.forward(h)
    t.right(90)
    t.forward(b)
    t.right(90)
    t.forward(h)


for teller in range (2):
    rechthoek(br, ho, x_pos, y_pos)
    br -= 100
    ho += 50
    y_pos -= 100
    x_pos += 50
				
			

In de for-loop wordt nu geregeld dat de functie rechthoek 2 keer aangeroepen wordt.

Nadat de functie de eerste keer is aangeroepen worden de waardes van de 4 variabelen veranderd.
De tweede rechthoek krijgt dus andere afmetingen en een andere positie.

Als je het resultaat goed bekijkt zul je opmerken dat bij de tweede rechthoek de breedte en de hoogte verwisseld zijn.
Dat komt omdat turtle bij het begin van deze rechthoek nog in de eindpositie van de eerste rechthoek staat.
Dat kunnen we corrigeren door ale eerste opdracht in de functie de regel: t.setheading(0) toe te voegen.
Turtle draait dan voordat hij begint te tekenen weer naar rechts.

				
					br = 300
ho = 90
x_pos = -150
y_pos = 35
    
def rechthoek(b, h, x, y):
    t.setheading(0)
    t.penup()
    t.goto(x,y)
    t.pendown()

    t.forward(b)
    t.right(90)
    t.forward(h)
    t.right(90)
    t.forward(b)
    t.right(90)
    t.forward(h)


for teller in range (2):
    rechthoek(br, ho, x_pos, y_pos)
    br -= 100
    ho += 50
    y_pos -= 100
    x_pos += 50
				
			

De cirkel in een functie

Het tekenen van een cirkel is redelijk eenvoudig met de opdracht t.circle(straal).

De code

Op regel 1 de leggen we de straal vast.
Op regel 2 de kleur.
Dan roepen we op regel 10 de functie teken_cirkel() aan met de parameters straal en kleur.

In de functie teken_cirkel tekenen we de cirkel: 
k met de waarde ‘red’ zorgt ervoor dat de cirkel een kleur krijgt en r met de waarde 90 bepaalt hoe groot de cirkel is. 

				
					straal = 90
kleur = 'red'

def teken_cirkel(r, k):
    t.color(k)
    t.setheading(0)
    t.penup()
    t.pendown()
    t.begin_fill()
    t.circle(r)
    t.end_fill()

teken_cirkel(straal, kleur)
				
			

6 cirkels in een loop

Laten we van de gelegenheid gebruik maken om iets extra’s toe te voegen door te gaan spelen met de code.

We gaan 6 cirkels tekenen met elk een eigen kleur.

Eerst leggen we de kleuren van de regenboog vast in een lijst met de naam kleuren.

Daarna  maken we een for-loop die alle elementen in de lijst doorloopt.
De kleur die aan de beurt is wordt elke keer vastgelegd in de variabele kleur. 
Dan roepen we de functie teken_cirkel aan en sturen als parameter mee de waardes van de variabelen straal en kleur.
Meteen daarna maken we de waarde van straal 10 pixels kleiner met straal -= 10.

De functie ontvangt elke keer de parameters met steeds een andere waarde en maakt daarmee een cirkel voor elk element in de lijst.

				
					straal = 90
kleuren = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']

def teken_cirkel(r, k):
    t.color(k)
    t.setheading(0)
    t.penup()
    t.pendown()
    t.begin_fill()
    t.circle(r)
    t.end_fill()

for element in kleuren:
    kleur = element
    teken_cirkel(straal, kleur)
    straal -= 10