In [20]:
import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate as it
In [120]:
m = 1
v0 = 10
ang = np.pi / 4
g = 9.7864
B = 1
dt = 0.001
x = 0
y = 0
In [123]:
vx = v0 * np.cos(ang)
vy = v0 * np.sin(ang)
v = v0
while y >= 0:
vy = vy - (B * (v ** 2) * dt * np.sin(ang) / m + g * dt)
vx = vx - (B * (v ** 2) * dt * np.cos(ang)) / m
v = np.sqrt(vx ** 2 + vy ** 2)
ang = np.arctan2(vx, vy)
x = x + vx * dt
y = y + vy * dt
plt.plot(x,y,'.')
In [124]:
plt.show()
In [88]:
##### Dependências #####
import numpy as np
import matplotlib.pyplot as plt
##### Constantes #####
#aceleração gravitacional no IAG, incerteza de 3 no último digito
g = 9.7864
##### Funções #####
def simular(m=1, v0=10, ang0=0.8, B=1, x0=0, y0=0, dt=0.01):
"""Implementação do algoritimo descrito no relatório
Keyword arguments:
m -- Massa do projétil (kg caso unidades sejam SI)
v0 -- Velocidade inicial do projétil (m/s caso unidades sejam SI)
ang -- Ângulo de lançamento do projétil
B -- coeficiente de resistência ao movimento (kg/m caso unidades sejam SI)
x0 -- [Opcional, padrão: 0] Posição inicial no eixo horizontal (metros caso unidades sejam SI)
y0 -- [Opcional, padrão: 0] Posição inicial no eixo vertical (metros caso unidades sejam SI)
dt -- [Opcional, padrão: 0.01] Tamanho do passo (segundos caso unidades sejam SI)
"""
x, y, ang, v, vx, vy = ([], [], [], [], [], [])
#declarações iniciais das variaveis
x.append(x0)
y.append(y0)
ang.append(ang0)
v.append(v0)
vx.append(v0 * np.cos(ang))
vy.append(v0 * np.sin(ang))
i = 0
#enquanto o projétil não passar do solo, a iteração continua
while y[i] >= 0:
#velocidade atual do passo através do método de euler explicito
vy_i = vy[i] - (B * (v[i] ** 2) * np.cos(ang[i]) / m + g) * dt
vx_i = vx[i] - B * (v[i] ** 2) * np.sin(ang[i]) * dt / m
#posição atual do passo através do método de euler explicíto
x_i = x[i] + vx_i * dt
y_i = y[i] + vy_i * dt
#velocidade escalar atual do passo
v_i = np.sqrt(vx_i ** 2 + vy_i ** 2)
#angulo atual do passo
ang_i = np.arctan2(vx_i, vy_i)
#armazenar na lista
x.append(x_i)
y.append(y_i)
ang.append(ang_i)
v.append(v_i)
vx.append(vx_i)
vy.append(vy_i)
i += 1
t = np.arange(0, dt * len(x), dt)
output = {'x':x, 'y': y, 'vx': vx, 'vy': vy, 'v':v, 'ang':ang, 't': t}
return output
##### Interação com o usuário #####
def main():
print("oi")
if __name__ == "__main__":
main()
In [89]:
a = simular()
In [92]:
plt.plot(a['x'], a['y'])
plt.show()
In [ ]: