• No results found

Programmeren en Wetenschappelijk Rekenen in Python Wi1205AE I.A.M. Goddijn, Faculteit EWI 8 mei 2014

N/A
N/A
Protected

Academic year: 2021

Share "Programmeren en Wetenschappelijk Rekenen in Python Wi1205AE I.A.M. Goddijn, Faculteit EWI 8 mei 2014"

Copied!
22
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Programmeren en Wetenschappelijk Rekenen in Python

Wi1205AE I.A.M. Goddijn, Faculteit EWI

8 mei 2014

(2)

Bijeenkomst 6

Onderwerp

Tips met betrekking tot ‘debuggen’

Animaties, simulaties en spellen Pygame: de basis

(3)

Algemene tips met betrekking tot ‘debuggen’

Foutmeldingen: lees ze zorgvuldig, let op het type fout en het regelnummer (kijk niet alleen in de regel zelf maar ook in de regel daarvoor).

Voeg printopdrachten in het te onderzoeken bestand toe om te kijken of het programma doet wat je wilt.

Vraag in de ‘shell’ de waarde van variabelen op om hun laatste waarde te onderzoeken.

Simuleer in je hoofd of op papier de uitvoering van je programma.

(4)

Wetenswaardigheden over pygame

Allerlei wetenswaardigheden over pygame zijn te vinden op de volgende website:

http://pygame.org/news.html De documentatie is hier te vinden:

http://pygame.org/docs/

Voeg de laatste pagina toe aan het ‘Help menu’ in Idle (via ‘Options’).

(5)

Structuur van een programma

Vorm van een programma met pygame:

importpygameas pg

# Initialiseer pygame pg.init()

# Definieer een paar kleuren

black = (0,0,0)# RGB = red, green, blue white = (255,255,255)

... ...

# Sluit het scherm pg.quit()

(6)

Opmerkingen

Als kleur = (x , y , z) dan 0 ≤ x , y , z ≤ 255 Voor kleurcodes kun je onder andere terecht op de volgende webpagina:

http://www.helderester.nl/kleurentabel.html

Crasht een pygame programma dan moet in de ‘shell’ de opdracht:

pg.quit() worden getypt.

(7)

Huishouding!

Het is goed gebruik om de rij ‘gebeurtenissen’ te legen.

Gebeurt dat niet dan kan een programma erg traag worden door uitbundig gebruik van het computergeheugen. Dit doen we zo:

# Schoon geheugen op pg.event.pump()

We zullen later bespreken hoe we de rij ‘gebeurtenissen’

kunnen gebruiken. Bijvoorbeeld om het scherm te sluiten of een reactie van het programma op een aanslag op het toetsenbord of een muisklik.

(8)

Het maken van een tekenscherm

# Maak een scherm om op te tekenen xmax = 600

ymax = 600

reso = (xmax,ymax)

scr = pg.display.set mode(reso)

scr is nu van het type Surface, een pygame object.

Zo’n object bevat data van plaatjes, pixels met hun kleur.

Ze kunnen zijn opgeslagen in het computergeheugen of worden getoond!

(9)

Co¨ ordinaten

y loopt op van boven naar beneden!

(10)

Het laden van een plaatje

Een plaatje wordt als volgt geladen:

ufoimg = pg.image.load(“UFO.gif”)

ufogif = pg.transform.scale(ufogif,(101,59)) uforect = ufoimg.get rect( )

ufogif en ufoimg zijn van het type Surface en uforect is van het type Rect dat ook een object van pygame is.

Surface en Rect zijn belangrijke objecten van pygame

(11)

Het object Surface

Voorbeelden van van methoden (functies)

(12)

Het object Rect

Data in het object (leden)

De positie van een plaatje wordt als volgt aange- geven:

# Positie van het object ‘ufo’

xscr = xmax/2

yscr = ymax-int(float(i)/500.∗ymax) uforect.center = xscr, yscr

(13)

‘Blitting’ wat is dat?

BLIT (BLock Image Transfer) staat voor ‘bit-level block transfer’ en zorgt voor een laagdrempelig en daarom snel kopi¨eren van ‘bitmaps’. Dit gebeurt meestal door de videokaart van een computer.

Door dit te gebruiken met plaatjes die een transparante achtergrond hebben kunnen ze op verschillende posities worden getekend (na het schoonmaken van het scherm).

Hiermee wordt beweging gesimuleerd.

(14)

Er gebeurt niets totdat je ‘flipt’...

Om het resultaat van een tekening of een plaatje vanuit het geheugen naar het scherm te kopi¨eren wordt de functie flip bij de module display gebruikt.

# Plaatje is klaar, laat zien op scherm scr.display.flip( )

Wanneer een animatie wordt gemaakt moet deze opdracht in een loop worden opgenomen en wel na het maken van een tekening of een plaatje en het laden daarvan met de

‘blit’ opdracht.

(15)

Dus:

# Teken het plaatje

scr.fill(bgcolor) # Maak het scherm schoon scr.blit(ufoimg,uforect) # Blit ufo op scherm scr.display.flip( ) # Plaatje klaar

(16)

De loop, timing

(17)

De loop waardoor een plaatje beweegt ziet er zo uit:

# Start clock: get ticks is de tijd in ms., geheel getal t0 = pg.time.get ticks( )/1000.

print“Start loop”

# Loop tot ufo bovenaan scherm is whiley < 100:

pg.event.pump( )

# Bepaal tijdstap

t =pg.time.get ticks( )/1000.

dt = t − t0

# Beweeg en laad een tekening of plaatje y = y + vy ∗dt

(18)

Bewegende bitmaps

Gebruik bestanden met als extensie ‘gif’ of ‘png’ met een transparante achtergrond.

Gebruik bijvoorbeeld de gratis software paint.net of Irfanview

Zie: http://www.getpaint.net/index.html en http://www.irfanview.com/

(19)

Het toetsenbord gebruiken

Zo kan het:

whilerunning == True:

pg.event.pump( ) # Schoon geheugen op keys = pg.key.get pressed( ) # Benader toetsenbord ifkeys[pg.K LEFT]:

x = max(x − vx ∗ dt, 0.0) ifkeys[pg.K RIGHT]:

x = max(x + vx ∗ dt, 100.0) ifkeys[pg.K ESCAPE]:

running == False

(20)

Weerstand

Dx

|D| = −Vx

|V | ⇔ Dx = −|D|

|V |Vx en Dy

|D| = −Vy

|V | ⇔ Dy = −|D|

|V |Vy De weerstandskracht is tegengesteld aan de snelheid, let op het

(21)

Ballistisch probleem

Als v =

"

vx

vy

#

en C = ρ

2CDA dan is de grootte van de weerstandskracht C |v|2. e = 1

|v|

"

vx

vy

#

is de eenheidsvector in de richting van de snelheid.

Maar dan is −C |v|2e = −C |v|

"

vx

vy

#

de weerstandskracht.

(22)

Jacco Hoekstra:

Programming and Scientific Computing in Python (Version 3.10),

Artikelnummer: 0691770043.

David C. Lay:

Linear Algebra and Its Applications (fourth edition), Pearson (2013),

ISBN-13: 978-1-292-02055-6.

James Stewart:

Calculus, Early Transcedentals (seventh edition), Cengage Learning (2012),

ISBN-13: 978-0-538-49887-6.

C.Vuik, P. van Beek, F. Vermolen en J.van Kan:

Numerical Methods for Ordinary Differential Equations, VSSD (2007),

Referenties

GERELATEERDE DOCUMENTEN

Tkinter https://docs.python.org/2/library/tkinter.html vb-2.py: een dialoogscherm om bestanden mee te openen Spiro 1m extra.py: dialoogscherm met een mededeling, knoppen etc.

een lijst begint en eindigt met een rechte haak, de elementen van de lijst worden gescheiden door een

Is bijvoorbeeld een functie sumabs gemaakt, die is opgeslagen in het bestand sumabs.py importeer dit dan met de opdracht:..

Gegeven zijn n massa’s ([kg ]) die bewegen in een plat vlak met een daarop werkende bekende kracht (zwaartekracht) ([N]) De massa’s zijn opgeslagen in een array m ([kg ]), de

De melding “Runtime Error” zegt dus dat er iets fout is gelopen tijdens het werken van het programma...

De methode van Newton-Raphson Het benaderen van een bepaalde integraal. De methode van Euler

Die tatoeages zijn dus een interessante informatiebron voor rechercheteams, ook als deze niet recent zijn gezet. Zij kunnen iets vertellen over sociale relaties

Nadat 1 kaart is omgedraaid blijven er