Grafik. TDDC66 Datorsystem och programmering Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Relevanta dokument
Programmeringsuppgift Game of Life

LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Institutionen för matematik och datavetenskap Karlstads universitet. GeoGebra. ett digitalt verktyg för framtidens matematikundervisning

Motivation. Programmeringsuppgift: En första ansats: Lagra info om anställda Håll reda på varje anställds närmaste chef. som också är en anställd!

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

AGENTBASERAD MODELLERING

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-15, TDA540. Dag: , Tid:

Föreläsning 5-6 Innehåll

Tynker gratisapp på AppStore

DN1212/numpm Numeriska metoder och grundläggande programmering Laboration 1 Introduktion

Extramaterial till Matematik Y

Kravspecifikation TDP005 Projekt: Objektorienterat system

Introduktion till programmering

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 8 10, 7 april 2016

TDDC74 Lab 02 Listor, sammansatta strukturer

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Dataabstraktion. TDDD73 Funktionell och imperativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Conways Game of life: Att simulera några av livets egenskaper genom en datorprogram

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Grafiska användargränssnitt i Java

DUGGA Tentaupplägg

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Starta ett fönster... Hur håller tkinter reda på musklick? Olika sätt att organisera fönsterinnehåll. Och för att placera våra widgets

3. Välj den sprajt (bild) ni vill ha som fallande objekt, t ex en tårta, Cake. Klicka därefter på OK.

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Uppgift 1 ( Betyg 3 uppgift )

Laboration 4: Digitala bilder

Polygoner. Trianglar på tre sätt

Grafiska användargränssnitt i Java

Kom igång. Readyonet Lathund för enkelt admin. Logga in Skriv in adressen till din webbsida följt av /login. Exempel:

GeoGebra i matematikundervisningen - Inspirationsdagar för gymnasielärare. Karlstads universitet april. Liten introduktionsguide för nybörjare

Fly me to the moon. Laboration om relationer, TDDC75 Diskreta strukturer. Mikael Asplund. 5 september 2017

729G04 Programmering och diskret matematik

IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning (i) Peter Dalenius Institutionen för datavetenskap

Introduktionsmöte Innehåll

Undersökande arbetssätt i matematik 1 och 2

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Konvexa höljet Laboration 6 GruDat, DD1344

Kort introduktion till POV-Ray, del 1

Programmering. Den första datorn hette ENIAC.

Regionala Cancercentrum Logotyp

EDAA01 Programmeringsteknik - fördjupningskurs

Slutrapport: Informationsvisualisering av släktträd

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Grafiska användargränssnitt i Java

Subversion. Laboration. Höstterminen 2008 r81. Ronny Kuylenstierna

3.0. Tips och Trix Sida 1 av 18

729G04 Programmering och diskret matematik. Python 3: Loopar

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning 1 Peter Dalenius Institutionen för datavetenskap

Laboration: Whitebox- och blackboxtesting

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Aktivitetsbank. Matematikundervisning med digitala verktyg II, åk 1-3. Maria Johansson, Ulrica Dahlberg

Introduktion till Matlab

Mjukstart i programmering

Introduktion till programmering, hösten 2011

Introduktion till Matlab

729G04 Programmering och diskret matematik

Objektorienterad programmering

Programmering, grundkurs

Grafiska pipelinens funktion

Föreläsning i webbdesign. Bilder och färger. Rune Körnefors. Medieteknik Rune Körnefors rune.kornefors@lnu.se

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Övningsuppgifter kapitel 8

Statistik över heltal

Programmering B med Visual C

Kom igång med Autocad 2008

Lennart Rolandsson, Uppsala universitet, Ulrica Dahlberg och Ola Helenius, NCM

v. 42 Python HT17 En introduktion Oscar Bergqvist

Kravspecifikation. Sammanfattning. Fyra i rad Javaprojekt inom TDDC32. Version 2.0. Datum Dokumentnummer

Lär dig programmera för dig mellan 6 och 100 år...

TDDC74 Programmering, abstraktion och modellering. Tentamen

Programmering. Analogt och med smårobotar. Nina Bergin

Arv och polymorfism i Java

729G74 IT och programmering, grundkurs. Tema 1, Föreläsning 2 Jody Foo,

TDP001/TDP002. Introduktionsföreläsning. Eric Elfving Institutionen för Datavetenskap (IDA)

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Robotarm och algebra

INFORMATIK - MED SYSTEMVETENSKAPLIG INRIKTNING, GRK/A (1-30 HP)

TDP002 Imperativ programmering. Laborationsmaterial emacs python-mode

Extramaterial till Matematik Y

Model View Controller. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Introduktion till programmering

Tentamen TEN1 HI

TDIU01 (725G67) - Programmering i C++, grundkurs

Tentamen i. Programmering i språket C

Övningsuppgift. Repeterbara citat. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Transkript:

Grafik TDDC66 Datorsystem och programmering Föreläsning 4 Peter Dalenius Institutionen för datavetenskap 2013-09-16

Anmälan till laborationer Från och med laboration 3 ska ni arbeta i par. Anmälan sker i Webreg via länk på kursens webbsidor. Anmäl er senast fredag 20 september. Efter anmälningstidens slut kommer ni att få tillgång till versionshanteringssystemet Subversion som kommer användas för att redovisa laborationer hädanefter. Om ni redan har pratat ihop er, anmäl er på samma gång. Om du inte har någon att jobba ihop med, skriv upp dig ensam, eller skriv upp dig bredvid någon annan. Håll ihop klasserna. I övrigt spelar det ingen roll vilken grupp man anmäler sig till. 2

Tidigare utvärderingar TDDC66 Datorsystem och programmering: 4,0 (52%) TDDD64 Programmering i Python: 4,0 (33%) Boken var inte nödvändig för någon som redan kunde lite programmering, detta kan vara värt att poängteras för studenterna. Fler övningsuppgifter samt lösningar hade varit att önska! Se till att tentamiljön fungerar bättre till nästa gång. 3

Översikt Introduktion till grafik i Python Grundläggande grafiska objekt Exempel Interaktivitet Inför andra laborationsomgången 4

Hur organiserar man programkod? funktioner (verktyg) data (råvaror, material) 5

Hur organiserar man programkod? objekt (verktyg och material sorterat efter ämne) 6

Objektorientering Objektorientering är i grund och botten ett sätt att skapa ordning och reda i programkoden. Python stödjer objektorientering, men tvingar oss inte att använda det. Vi kommer inte att ta upp objektorientering, bortsett från att vi kommer att använda en del av de objekt som redan finns i Python. När man ser något i programkoden som ser ut så här objekt.medlem då vet man att objekt är med i bilden på något sätt. 7

Komma igång med grafik Python har ett standardpaket för grafik som heter tkinter. Det kan dock vara lite krångligt att använda för nybörjare, så istället ska vi använda ett mindre paket kallat graphics som följer med läroboken (se kapitel 4). Paketet graphics innehåller några få enkla kommandon för att rita figurer på skärmen. 8

Komma igång med grafik 0 199 x import graphics win = graphics.graphwin('demo') win.close() 0 from graphics import * win = GraphWin('Demo') p = Point(50,50) p.draw(win) y 199 9

from graphics import * win = GraphWin('Demo') r = Rectangle(Point(20,20),Point(100,60)) r.setfill('green') r.draw(win) Exempel på grafiska objekt c = Circle(Point(150,150),45) c.setfill('blue') c.draw(win) t = Text(Point(60,40),"Hello!") t.draw(win) l = Line(Point(100,60),Point(150,150)) l.draw(win) o = Oval(Point(40,140),Point(120,180)) o.setfill('red') o.draw(win) r2 = Rectangle(Point(40,140),Point(120,180)) r2.setoutline('orange') r2.draw(win) 10

Något kort om färger Grafikpaketet från läroboken erbjuder några vanliga grundfärger som vi redan sett exempel på. Man skriver helt enkelt färgens namn som en sträng. Man kan också blanda sin egen färg genom att ange hur mycket rött, blått och grönt man vill blanda. De tre argumenten ska vara heltal i intervallet 0-255. Om man har jobbat med hexadecimalt uttryckta färgkoder förut kan man använda dem istället. Gör en webbsökning på hex colors för mer tips. 'green' color_rgb(130,0,164) '#8200a4' 11

def draw_with_shadow(object,window): shadow = object.clone() shadow.setfill('black') shadow.move(10,10) shadow.draw(window) object.draw(window) Fler exempel på objekt def main(): win = GraphWin('Demo',200,300) p = Polygon(Point(30,80),Point(70,100), \ Point(100,30)) p.setfill('#00afaf') draw_with_shadow(p,win) c = Circle(Point(140,140),30) c.setfill('#af00af') draw_with_shadow(c,win) i = Image(Point(100,250),'owl.gif') i.draw(win) 12

Exempel Vi vill ha en funktion contactsheet som tar en lista med namn på bildfiler och som visar upp dessa sida vid sida i ett fönster, tillsammans med bildens namn. Antalet bilder är inte känt på förhand. contactsheet(['cat.gif', 'arrangement.gif', 'painting.gif']) 13

Design av gränssnittet x 0 149 299 599 899 0 y 149 284 299 höjd = 300 bredd = 300 * antal bilder bildernas mittpositioner (149+300*i,149) där i = 0, 1, 2,... texternas mittpositioner (149+300*i,284) där i = 0, 1, 2,... 14

Implementation from graphics import * Siffrorna är hårdkodade. Vad händer om vi behöver ändra storleken? def contactsheet(images): win = GraphWin('Contact Sheet',300*len(images),300) for i in range(len(images)): img = Image(Point(149+300*i,149),images[i]) img.draw(win) txt = Text(Point(149+300*i,284),images[i]) txt.draw(win) contactsheet(['cat.gif', 'arrangement.gif', 'painting.gif']) 15

Nytt koordinatsystem x 0 0.5 1 2 3 1 y 0.5 0.05 0 win.setcoords(0,0,3,1) önskade koordinater för nedre vänstra och övre högra hörnet 16

Ny implementation from graphics import * def contactsheet(images): size = 300 n = len(images) win = GraphWin('Contact Sheet',size*n,size) win.setcoords(0,0,n,1) for i in range(n): img = Image(Point(i+0.5,0.5),images[i]) img.draw(win) txt = Text(Point(i+0.5,0.05),images[i]) txt.draw(win) contactsheet(['cat.gif', 'arrangement.gif', 'painting.gif']) 17

Interaktivitet from graphics import * def main(): win = GraphWin('Demo') msg = Text(Point(100,100), \ 'Click three times!') msg.draw(win) p1 = win.getmouse() p2 = win.getmouse() p3 = win.getmouse() triangle = Polygon(p1,p2,p3) triangle.setfill('peachpuff') triangle.draw(win) Vänta på ett musklick och returnera ett Point-objekt. main() 18

Inför andra laborationsomgången Game of Life är en cellulär automat som konstruerades av matematikern John Conway 1970. Det är ett spel för 0 spelare som spelas på ett oändligt rutat papper. Varje ruta (cell) kan vara död eller levande. Varje gång klockan tickar föds eller dör några celler, enligt särskilda regler. Cellulära automater är diskretmatematiska modeller som t.ex. kan användas för att studera fenomen i kaotiska system, eller bara för att de är roliga att titta på. 19

Regler för Game of Life Regler En levande cell med 0-1 levande grannar dör av ensamhet En levande cell med 4-8 levande grannar dör av trängsel En död cell med 3 levande grannar återföds Alla övriga celler är oförändrade Generation 12 3 20

Typer av mönster i Game of Life Stabila mönster block bikupa 21

Typer av mönster i Game of Life Oscillerande mönster blinker padda 22

Typer av mönster i Game of Life Mönster som förflyttar sig glider (generation 1) 2) 3) 4) 5) 23

Uppgift Vi har skrivit ett program som simulerar Game of Life på ett ändligt rutnät. Er uppgift är att skriva kod som ritar upp spelplanen på skärmen på något lämpligt sätt. Titta på den engelska Wikipedia-sidan för Game of Life för tips på olika intressanta mönster. 24

Bildkällor: http://commons.wikimedia.org/wiki/file:wood_planks.jpg http://commons.wikimedia.org/wiki/file:hammer2.jpg http://commons.wikimedia.org/wiki/file:robertson_screwdriver_set.jpg http://commons.wikimedia.org/wiki/file:several_packages_of_yarn.jpg http://commons.wikimedia.org/wiki/file:cable-caston-pull-yarn-throught-stitches.jpg http://commons.wikimedia.org/wiki/file:shovels.png http://commons.wikimedia.org/wiki/file:nannospalax_ehrenbergi_soil_mounds01.jpg www.liu.se