jukaukor

vene_ja_majakka.py

Aug 7th, 2021 (edited)
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.34 KB | None | 0 0
  1. # Vene liikkuu tasaisessa nopeudella vakiosuunnalla
  2. # Majakka on kiinteällä paikalla
  3. # simulointi näyttää tilanteen
  4. # kompassisuunta veneestä majakkaa näyetään sekunnien välein
  5. # Alunperin tehtävän idea: Kari Peisa ryhmässä Rakastan matematiikkaa
  6. # Juhani Kaukoranta 9.8.2021
  7. import pygame, math
  8. pygame.font.init()
  9. font = pygame.font.Font('freesansbold.ttf', 24)
  10. # veneen lähtöpaikka
  11. (xvene,yvene) = (200,500) # venee lähtöpiste
  12. (xmajakka,ymajakka) = (300,100) # majakan sijainti
  13. v = 10*3 # veneen nopeus 10 m/s
  14. alfadeg = 350 # veneen kulkusuunta pohjoisesta itään (heading, kompassisuunta)
  15. alfa = alfadeg*math.pi/180 # venee kulkusuunta radiaaneina
  16. t0 = 0.0 # aloitusaika
  17. r = 5 # venepallon säde
  18. R = 10 # majakkapallon säde
  19. Dt = 1/100.0 # aika-askel
  20. T = 6000 # animaation kesto 6000*1/100 = 60 s
  21. # piirtoalueen asetus
  22. (width,height) = (1280,720)
  23. screen = pygame.display.set_mode((width, height))
  24. black = (0,0,0)
  25. yellow =(255,255,0)
  26. red = (255,0,0)
  27. screen.fill(black)
  28. pygame.draw.circle(screen, red, (xmajakka,ymajakka),R) # majakka
  29. pygame.display.flip()
  30. # vene alkaa liikkua
  31. vx = v*math.sin(alfa)
  32. vy = v*math.cos(alfa)
  33. textvene = font.render('veneestä kulkusuunta :'+str(alfadeg)+' astetta', True, yellow, black)
  34. screen.blit(textvene,(100,600))
  35. timer = 0 # ajastin, 1 s välein tulostetaan suunta
  36. for j in range (0,T) :
  37. timer += 1
  38. xvene = xvene+ vx*Dt # veneen paikan x-koordinaatti
  39. yvene = yvene - vy*Dt # venee paikan y-koordinaatti (kasvaa-,vähenee+)
  40. if xvene > width or yvene < 0: # vene pysähtyy yläreunaan tai oikeaan reunaan
  41. break
  42. if xvene < 0 or yvene > height: # pysähtyy vasempaa reunaan tai alareunaan
  43. break
  44. if (xvene-xmajakka)**2 +(yvene-ymajakka)**2 < (R+r)**2 : #vene törmää majakkaan
  45. pygame.display.set_caption("Vene törmäsi majakkaan")
  46. break
  47. pygame.draw.circle(screen, yellow,(xvene,yvene),r)
  48. pygame.display.flip()
  49. # ruudun päivytyksen viive vakioidaan
  50. pygame.time.delay(2)
  51. pygame.draw.circle(screen,black,(xvene,yvene),r)
  52. # lasketaan suunta veneestä majakkaan
  53. if yvene != ymajakka: # yleinen tapaus
  54. suunta = round(math.atan((xmajakka-xvene)/(yvene-ymajakka))*180/math.pi)
  55. if yvene > ymajakka and xvene > xmajakka: # vene majakasta kaakkoon
  56. suunta = round(math.atan((xmajakka-xvene)/(yvene-ymajakka))*180/math.pi) +360
  57. if yvene < ymajakka and xvene > xmajakka: # vene majakan koillispuolella
  58. suunta = round(math.atan((xmajakka-xvene)/(yvene-ymajakka))*180/math.pi) + 180
  59. if yvene < ymajakka and xvene < xmajakka : # vene majakan luoteispuolella
  60. suunta = -round(math.atan((xmajakka-xvene)/(yvene-ymajakka))*180/math.pi)
  61. if abs(yvene-ymajakka) == 0 and xvene > xmajakka: # erikoistapas
  62. suunta = 270
  63. if abs(yvene-ymajakka) == 0 and xvene < xmajakka: # erikoistapaus
  64. suunta = 90
  65. if timer == 100: #sekunti kulunut,näytettän suuntalukema
  66. pygame.display.set_caption("Kompassisuunta veneestä majakkaan: "+str(suunta)+" astetta")
  67. text = font.render('suunta veneestä majakkaan :'+str(suunta)+' astetta', True, yellow, black)
  68. textRect = text.get_rect() # suuntakulman tulostusalue
  69. textRect.center = (640,50) # suuntakulman tulostuksen keskipiste
  70. screen.blit(text, textRect)
  71. timer = 0
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
Add Comment
Please, Sign In to add comment