import sympy as sy
import numpy as np
import matplotlib.pyplot as plt

#2
#Uma bola é lançada verticalmente para cima com a velocidade 10 m/s.

#considerando a resistência do ar, usando o método de Euler. A
#velocidade terminal da bola no ar é de 100 km/h (27.8 m/s).



# Parâmetros
g = 9.8              # aceleração da gravidade (m/s²)
v_t = 27.78          # velocidade terminal (m/s)
dt = 0.001           # passo de tempo
t_final = 5          # tempo máximo para a simulação (s)

# Número de pontos
n = int(t_final / dt) + 1

# Inicialização dos vetores de tempo, posição e velocidade
t = np.linspace(0, t_final, n)
y = np.empty(n)
v = np.empty(n)

# Condições iniciais
y[0] = 0
v[0] = 10  # velocidade inicial (m/s)

# Método de Euler
for i in range(n - 1):
    a = -g - (g / v_t) * v[i]
    v[i + 1] = v[i] + a * dt
    y[i + 1] = y[i] + v[i] * dt

# Plot da posição em função do tempo
plt.figure()
plt.plot(t, y, label="Posição (y)")
plt.xlabel("Tempo (s)")
plt.ylabel("Posição (m)")
plt.title("Movimento com Resistência do Ar (Método de Euler)")
plt.legend()
plt.grid(True)
plt.show()



# Estimar instante de altura máxima (v = 0)
for i in range(n - 1):
    if v[i] >= 0 and v[i + 1] < 0:
        # Interpolação linear:
        t_max = t[i] - v[i] * (t[i + 1] - t[i]) / (v[i + 1] - v[i])
        y_max = y[i] + v[i] * (t_max - t[i])
        break

print(f"Altura máxima com resistência do ar: {y_max:.2f} m, ocorrendo em t = {t_max:.3f} s")

# Estimar instante de retorno à posição inicial (y = 0)
for i in range(n - 1):
    if y[i] > 0 and y[i + 1] <= 0:
        # Interpolação linear:
        t_retorno = t[i] - y[i] * (t[i + 1] - t[i]) / (y[i + 1] - y[i])
        break

print(f"Retorno à posição inicial com resistência do ar em t = {t_retorno:.3f} s")
