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()


oi

In [89]:
a = simular()

In [92]:
plt.plot(a['x'], a['y'])
plt.show()

In [ ]: