Labb 2 - Enkel grafik
När ni vill ha hjälp så använd Queue. När du är redo att redovisa: Skapa ett issue på Git med ämnet "Redovisning". En assistent kommer att rätta din labb och boka tid för redovisning med dig.
Mål för labben
Målet är att förstå strukturerad programmering (if, while och for) samt procedurell programmering (att skriva funktioner). Labben ger också viss förståelse för hur grafik fungerar, men den är hårt styrd. Pedagogiskt sett är planen att använda grafisk feedback för att förbättra dina programmeringskunskaper.
Krav för labben
- Du får återanvända exempelkoden nedan för att lösa labben och tanken är att du ska rita alla deluppgifter med hjälp av funktioner, if-satser, while-satser, for-loopar och img.put.
- När det står nedan att funktionerna ska ta koordinater som parametrar så ska dessa anges som tupler.
- Det är inte tillåtet att använda metoder på ett Canvasobjekt i lösningarna av deluppgifterna nedan. Mer specifikt är det inte tillåtet att använda inbyggda funktioner för att rita cirklar, trianglar eller kvadrater i grunduppgiften.
- Det är inte tillåtet att använda nyckelordet "to" som parameter till img.put.
- Om du använder eleganta repetitioner (for och while) så går varje funktion att implementera med mycket få anrop till put. För många put-anrop per funktion blir kodupprepning och ger underkänt.
- Dina utritningsfunktioner får inte vara destruktiva mot annat som redan är ritat på skärmen. Exempel: Det är inte tillåtet att förstöra allt annat på skärmen för att rita ut en triangel. Det är inte heller tillåtet att rita ut en rektangel med en triangel inuti om rektangeln förstör delar av bilden som inte ingår i triangeln.
- Du ska inte behöva använda någon avancerad funktionalitet i tkinter för att lösa grunduppgiften. Se översta kravet.
- Det är tillåtet (men svårare på grunduppgiften, lättare för en del studenter på extrauppgiften) att använda ett annat grafikbibliotek, men det behöver fortfarande vara ett Pythonprogram som du lämnar in och redovisar.
Uppgift 1 – Rita en bild från ett färdigt program
Skriv in följande lilla program.
from tkinter import *
SIZE = 600
def sierpinski(img):
"""Adds a Sierpinski Fractal to img and returns None."""
for y in range(SIZE):
for x in range(SIZE):
if x&y == 0:
img.put("#ffffff", (x, y))
def main():
"""Create your image and call your functions inside this function."""
window = Tk()
canvas = Canvas(window, width=SIZE, height=SIZE, bg="#000000")
canvas.pack()
img = PhotoImage(width=SIZE, height=SIZE)
canvas.create_image((SIZE / 2, SIZE / 2), image=img, state="normal")
sierpinski(img)
mainloop()
if __name__ == '__main__':
main()
Kör programmet! Testa att ändra den globala konstanten SIZE för att ändra storleken på fönstret.
Uppgift 2 – rektangel
Definiera en funktion som ritar en fylld rektangel. Konturer räcker inte. Funktionen ska som parametrar ta bilden (img), koordinaterna för övre vänstra hörnet, kordinaterna för nedre högra hörnet och valfritt, men rekommenderat för nästa uppgift är en parameter för vilken färg som rektangeln ska ha.
Uppgift 3 – en ram
Skriv en funktion som ritar en svart rektangel innesluten i en vit rektangel. Det är tillåtet att lösa uppgiften med två anrop till den förra funktionen, särskilt om du valde dina parametrar klokt. Parametrisera var på skärmen som rektangeln ska ligga.
Uppgift 4 – triangel
Definiera en funktion som ritar en ifylld triangel. Funktionen ska ta koordinaterna för triangelns tre hörn som parametrar och fylla i allt mellan dessa hörn. Du får anta att katetrarna ligger parallellt med x- och y-axlarna.
Uppgift 5 – cirkel
Definiera en funktion som ritar en ifylld cirkel. Funktionen ska ta in radien och mittpunktens koordinater som parametrar.
Uppgift 6 – julgran
Använd en eller flera for-loopar för att sätta ihop flera trianglar av olika storlekar, samt en rektangel för stammen och dessutom julgranskulor.
Uppgift 7 - En bild
Skriv ett program som sätter ihop minst en av varje ovanstående till en fin bild, till exempel på ett hus med en sol ovanför. Vi betygsätter det tekniska och inte det estetiska.
Extrauppgift för betygshöjning
- En Mandelbrotfraktal Links to an external site.. För att göra beräkningarna effektiva så är det OK att approximera oändligheten med 200.
- Skriv en funktion som ritar en triangel utifrån 3 punkter som kan ligga var som helst i bilden.