Guest User

Balística

a guest
Jan 8th, 2011
365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.08 KB | None | 0 0
  1. # -*- coding: UTF-8 -*-
  2.  
  3. """
  4. Balistica
  5. Autor: GabrielBap <[email protected]>
  6. Tipo: Física
  7. Descrição: Informa a distância horizontal quem um projétil atingiu baseado na força aplicada, força da gravidade e ângulo da força. Também exibe a trajetória em uma janela pygame.
  8. Complexidade:
  9.     Pior Caso: 0(1)
  10.     Melhor Caso: 0(1)
  11.  
  12. Referências:
  13.     [1]http://www.algosobre.com.br/fisica/balistica-e-lancamento-de-projetil.html
  14. """
  15.  
  16. import pygame
  17. from time import time
  18. from math import pi, sin, cos, radians
  19.  
  20. def simula_tiro(angle, forca, gravidade, startY):
  21.    
  22.    largura, altura = 1200, 900
  23.    
  24.    #Pygame stuff
  25.    tela = pygame.display.set_mode((largura, altura))
  26.    tela.fill((255,255,255))
  27.    #End of Pygame stuff
  28.    
  29.    angleR = radians(angle)
  30.    
  31.    start = time() # tempo inicial do tiro
  32.    # Define os vetores de força vertical e horizontal
  33.    VetorVertical = sin(angleR) * forca
  34.    VetorHorizontal = cos(angleR) * forca
  35.    # Pow!
  36.    Y = startY
  37.    X = 0
  38.    while Y > 0: # Enquanto a bala não cair...
  39.       agora = time()
  40.       sleapsedTime = agora - start # Equivalente à variação de tempo
  41.       X = VetorHorizontal * sleapsedTime # Distância atual em X
  42.       Y = startY + (VetorVertical * sleapsedTime) - (gravidade * (sleapsedTime**2)) # Distância atual em Y
  43.      
  44.       #Pygame
  45.       pygame.draw.circle(tela, (0,0,0),(X,altura-Y),3)
  46.       pygame.display.update()
  47.       # Omitir para ver o rastro:
  48.       tela.fill((255,255,255))
  49.      
  50.       #End of Pygame stuff
  51.    return angle, X, Y
  52.  
  53. forca = float(raw_input("Qual será a força? "))
  54. gravidade = float(raw_input("Qual será a força da gravidade? "))
  55. startY = float(raw_input("Qual será a altura do canhão? "))
  56. angle = float(raw_input("Qual será o ângulo? (Opcional) "))
  57.  
  58. dados = simula_tiro(angle, forca, gravidade, startY)
  59. resultado = "Ângulo = %i\n X = %.5f\n Y = %.5f\n\n" % (dados[0], dados[1], dados[2])
  60. print resultado
  61.  
  62. if raw_input("Gostaria de salvar os resultados?(S/N) ") == "S":  
  63.    arquivo = open("Resultados-Balistica.txt","w")
  64.    arquivo.write(resultado)
  65.    arquivo.close()
Advertisement
Add Comment
Please, Sign In to add comment