We gaan nu een start maken met de volgende vlaksvulling
We kunnen hiervoor de code van de vorige opdrachten goed gebruiken. Daar moesten wij een deeltaak driehoek maken. Deze hoeft alleen nog worden uitgebreid met een fill_color()
import turtle import math t = turtle.Turtle() t.speed(0) def driehoek(zijde,kleur): t.fillcolor(kleur) t.begin_fill() t.forward(zijde) t.left(90) t.forward(zijde) t.left(135) t.forward(math.sqrt(2)*zijde) t.left(135) t.end_fill()
In het de vlakvulling zien we dat het driehoekje steeds wordt herhaald. Maar de kleur wisselt steeds
Om onze code flexibel te maken starten we met het aanmaken van variabele.
# variabele zijde = 50 rijen = 4 kolommen = 5
Als we dan later meer rijen of kolommen willen tekenen kan dat eenvoudig door het getal achter de variabele aan te passen.
In de vlakvulling zien we dat op elke rij 5 driehoekjes staan. Dit kunnen we oplossen met een loop
for kolom in range(kolommen): driehoek(zijde,"red")
Dit tekent echter 5 driekhoekjes over elkaar heen. Dus na het tekenen van een driehoek moeten we onze turtle zijde
opschuiven om de volgende te tekenen.
for kolom in range(kolommen): driehoek(zijde,"red") t.forward(zijde)
t.penup() t.backward(kolommen*zijde) # je gaan in ons geval 5x50 terug t.right(90) t.forward(zijde) t.left(90) t.pendown()
De andere manier is door een goto(x,y), daarbij heb je weer twee mogelijkheden
Optie 2: Code die uitgevoerd wordt voordat er een rij wordt getekend
t.penup()
t.goto(0,-rij*zijde) # let op variabele rij moeten we nog aanmaken
t.pendown()
Optie 3: Code die volgt na het tekenen van een rij
t.penup() t.goto(0,-(rij+1)*zijde) # let op variabele rij moeten we nog aanmaken t.pendown()
Omdat we in de tekening steeds de volgende rij eronder tekenen is bij de goto() de y-coördinaat negatief. rij
loopt daarbij van 0 tot 4, die gaat we zo aanmaken als we ook de loop voor de rijen gaan gebruiken.
De optie met de minste code is uiteraard de meest aantrekkelijke om te gebruiken. Dus we gaan voor optie 2, maar de andere opties zijn natuurlijk ook juist.
Code tot nu toe
import turtle import math t = turtle.Turtle() t.speed(0) def driehoek(zijde,kleur): t.fillcolor(kleur) t.begin_fill() t.forward(zijde) t.left(90) t.forward(zijde) t.left(135) t.forward(math.sqrt(2)*zijde) t.left(135) t.end_fill() # variabele zijde=50 rijen=4 kolommen=5 #vlakvulling t.penup() t.goto(0, -rij * zijde) # let op geeft foutmelding want rij bestaat nog niet!!!! t.pendown() for kolom in range(kolommen): driehoek(zijde, "red") t.forward(zijde)
rijen
keer herhalenfor rij in range(rijen): t.penup() t.goto(0, -rij * zijde) t.pendown() for kolom in range(kolommen): driehoek(zijde, "red") t.forward(zijde)
Dus voor het tekenen van een rij wordt de turtle in de juiste positie gezet dmv goto()
. Daarna wordt de rij getekend.
Nu het laatste probleem de driehoekjes veranderen steeds van kleur. De kleur is afhankelijk van de de positie in de rij en welke kolom.
Voor de eerste rij starten we met rood, onze herhaling loopt van 0 tot 5. Hierbij moet driehoek 0, 2, 4 rood worden en 1, 3 blauw. Je ziet waarschijnlijk al dat we iets met even/oneven moeten gaan doen.
Als kolom
even is dan teken we rood en anders blauw
if kolom % 2 == 0: # bij kolom=even geeft de deling geen rest (modulo = 0) driehoek(zijde, "red") else: driehoek(zijde, "blue")
Maar bij de volgende rij die we tekenen is het weer net andersom
if kolom % 2 == 1: # bij kolom=oneven geeft de deling rest 1 (modulo = 1) driehoek(zijde, "red") else: driehoek(zijde, "blue")
Dus bij een even rij moeten we de eerste gebruiken en bij een oneven rij de tweede
if rij % 2 == 0: # even rij if kolom % 2 == 0: # even kolom driehoek(zijde, "red") else: # oneven kolom driehoek(zijde, "blue") else: # oneven rij if kolom % 2 == 1: # oneven kolom driehoek(zijde, "red") else: # even kolom driehoek(zijde, "blue")