Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Kappale heitetään vaakasuoraan, putoaa lattiaan, pomppii
- # ja menettää koko ajan liike-energiaansa
- # Juhani Kaukoranta 13.9.2021
- import pygame, math
- pygame.font.init()
- font = pygame.font.Font('freesansbold.ttf', 24)
- (width,height) = (2000,1200) # näytön koko pikseleinä
- screen = pygame.display.set_mode((width, height))
- black = (0,0,0)
- blue =(0,0,255)
- yellow =(255,255,0)
- red = (255,0,0)
- magenta = (255,0,255)
- screen.fill(black)
- pygame.display.set_caption("Vaakasuoraan heitetty pallo putoaa ja pomppii")
- sk = 100 # skaalaus matem-koordinaatistosta pygame-koordinaatistoon
- (origox,origoy) = (100,1000) # pygamen koordinaatiston origo
- r = 4 # heitettävän pallon säde
- pygame.draw.line(screen,red,(origox,origoy-100),(origox+1600,origoy-100),2) # x-akseli,maa
- pygame.draw.line(screen,red,(origox+1600,origoy-100),(origox+1600,origoy-800),2) # oikea reuna
- pygame.draw.line(screen,red,(origox,origoy-100),(origox,origoy-800),2) # vasen reuna
- pygame.draw.line(screen,red,(origox,origoy-800),(origox+1600,origoy-800),2) # yläreuna
- pygame.draw.line(screen,magenta,(origox+100,origoy-100),(origox+100,origoy-500),4) # lähtöpaalu
- pygame.draw.circle(screen,yellow,(origox+101,origoy-500),r) # pallo
- pygame.display.flip()
- pygame.time.delay(2000)
- pygame.draw.circle(screen,black,(origox+101,origoy-500),r) # pallo lähtee lentämään
- # huom! Pygamen oordinaatiston y kasvaa alaspäin, matematiikan y kasvaa ylöspäin
- # matemaattisen lasusekkeet laskevat matem. koordinaatistossa
- # kuvat piirretään Pygamen koordinaatistossa
- v0 = 3.5 # alkunopeus
- g = -9.80665 # putouskiihtyvyys (alas y-suunnassa)
- t0 = 0.0 # aloitusaika
- r = 4# kpl esittävän pallon säde
- (x,y) = (2,5) # lähtöpaikka metreinä
- e = 0.95 # pallon kimmoisuusaste pomppauksessa
- vx = v0 # pallon alkunopeus x-suunnassa (vaakasuunta)
- vy = 0 # pallon pystynopeus
- Dt = 1/100.0 # aika-askel sekunteina
- N = 4000 # N*Dt simuloinnin askelien maksimi
- pomppuja = 0 # keskeyttää kun pomppuja yli 15
- for j in range (0,N) : # simulointi alkaa
- vy = vy +g*Dt/2 # huom! g negatiivinen, osoittaa alas, päivittää nopeuden y-suunnassa
- x = x + vx*Dt # koordinaattien päivitys, matkalisäys = nopeus*aikaväli
- y = y + vy*Dt
- pygame.draw.circle(screen, yellow,(origox+ sk*x,origoy- sk*y),r) # kpl putoaa vapaasti
- pygame.display.flip() # näytetään kpl
- pygame.time.delay(4)
- pygame.draw.circle(screen, black,(origox+ sk*x,origoy - sk*y),r) # kpl putoaa vapaasti
- pygame.time.delay(4)
- if origoy - sk*y >= origoy-100-r-1 : # pomppaa x-akselilta (pygamen koordinaatit)
- # x-suuntainen eli vaakasuuntainen pomppunopeus säilyy pomppujen aikana
- vy = e*abs(vy) # pystysuuntainen pomppunopeuden komponentti muuttuu
- pomppuja += 1 # pomppulaskuri
- if origox+ sk*x >= origox+1600-r-1 and y > 0 : #pomppaa oikeasta reunasta
- # vertailu Pygamen koordinaateilla
- vx = -e*abs(vy) # vy säilyy,vx pomppaa takaisin
- pomppuja += 1
- if origox+ sk*x <= origox+100+2+r and y > 0 : #pomppaa paalusta
- # vertailu Pygamen koordinaateilla
- vx = e*abs(vy) # vy säilyy,vx pomppaa takaisin
- pomppuja += 1
- if y < 0 or pomppuja > 15: #lopetetaan
- break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement