Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Vene liikkuu tasaisessa nopeudella vakiosuunnalla
- # Majakka on kiinteällä paikalla
- # simulointi näyttää tilanteen
- # kompassisuunta veneestä majakkaa näyetään sekunnien välein
- # Alunperin tehtävän idea: Kari Peisa ryhmässä Rakastan matematiikkaa
- # Juhani Kaukoranta 9.8.2021
- import pygame, math
- pygame.font.init()
- font = pygame.font.Font('freesansbold.ttf', 24)
- # veneen lähtöpaikka
- (xvene,yvene) = (200,500) # venee lähtöpiste
- (xmajakka,ymajakka) = (300,100) # majakan sijainti
- v = 10*3 # veneen nopeus 10 m/s
- alfadeg = 350 # veneen kulkusuunta pohjoisesta itään (heading, kompassisuunta)
- alfa = alfadeg*math.pi/180 # venee kulkusuunta radiaaneina
- t0 = 0.0 # aloitusaika
- r = 5 # venepallon säde
- R = 10 # majakkapallon säde
- Dt = 1/100.0 # aika-askel
- T = 6000 # animaation kesto 6000*1/100 = 60 s
- # piirtoalueen asetus
- (width,height) = (1280,720)
- screen = pygame.display.set_mode((width, height))
- black = (0,0,0)
- yellow =(255,255,0)
- red = (255,0,0)
- screen.fill(black)
- pygame.draw.circle(screen, red, (xmajakka,ymajakka),R) # majakka
- pygame.display.flip()
- # vene alkaa liikkua
- vx = v*math.sin(alfa)
- vy = v*math.cos(alfa)
- textvene = font.render('veneestä kulkusuunta :'+str(alfadeg)+' astetta', True, yellow, black)
- screen.blit(textvene,(100,600))
- timer = 0 # ajastin, 1 s välein tulostetaan suunta
- for j in range (0,T) :
- timer += 1
- xvene = xvene+ vx*Dt # veneen paikan x-koordinaatti
- yvene = yvene - vy*Dt # venee paikan y-koordinaatti (kasvaa-,vähenee+)
- if xvene > width or yvene < 0: # vene pysähtyy yläreunaan tai oikeaan reunaan
- break
- if xvene < 0 or yvene > height: # pysähtyy vasempaa reunaan tai alareunaan
- break
- if (xvene-xmajakka)**2 +(yvene-ymajakka)**2 < (R+r)**2 : #vene törmää majakkaan
- pygame.display.set_caption("Vene törmäsi majakkaan")
- break
- pygame.draw.circle(screen, yellow,(xvene,yvene),r)
- pygame.display.flip()
- # ruudun päivytyksen viive vakioidaan
- pygame.time.delay(2)
- pygame.draw.circle(screen,black,(xvene,yvene),r)
- # lasketaan suunta veneestä majakkaan
- if yvene != ymajakka: # yleinen tapaus
- suunta = round(math.atan((xmajakka-xvene)/(yvene-ymajakka))*180/math.pi)
- if yvene > ymajakka and xvene > xmajakka: # vene majakasta kaakkoon
- suunta = round(math.atan((xmajakka-xvene)/(yvene-ymajakka))*180/math.pi) +360
- if yvene < ymajakka and xvene > xmajakka: # vene majakan koillispuolella
- suunta = round(math.atan((xmajakka-xvene)/(yvene-ymajakka))*180/math.pi) + 180
- if yvene < ymajakka and xvene < xmajakka : # vene majakan luoteispuolella
- suunta = -round(math.atan((xmajakka-xvene)/(yvene-ymajakka))*180/math.pi)
- if abs(yvene-ymajakka) == 0 and xvene > xmajakka: # erikoistapas
- suunta = 270
- if abs(yvene-ymajakka) == 0 and xvene < xmajakka: # erikoistapaus
- suunta = 90
- if timer == 100: #sekunti kulunut,näytettän suuntalukema
- pygame.display.set_caption("Kompassisuunta veneestä majakkaan: "+str(suunta)+" astetta")
- text = font.render('suunta veneestä majakkaan :'+str(suunta)+' astetta', True, yellow, black)
- textRect = text.get_rect() # suuntakulman tulostusalue
- textRect.center = (640,50) # suuntakulman tulostuksen keskipiste
- screen.blit(text, textRect)
- timer = 0
Add Comment
Please, Sign In to add comment