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

# Exercício 3. Volante de badmington (aceleração uma função de velocidade) #

#1
#Faça o gráfico da lei do movimento 𝑦 𝑡 de 0 a 4.0 s.

#lei do movimento x(t) = x0 + v0*t + 1/2*ax*t^2
g = 9.8
v0 = 0
v_T = 6.80

t = sy.symbols('t')
y_expr = (v_T**2 / g) * sy.log(sy.cosh(g*t/v_T))

y_lam = sy.lambdify(t, y_expr, "numpy")

t_vals = np.linspace(0, 4, 100)
y_vals = y_lam(t_vals)

plt.plot(t_vals, y_vals)
plt.xlabel('tempo (s)')
plt.ylabel('posição (m)')
plt.title('Movimento do Volante de Badmington')
plt.grid()
plt.show()


#2
#Determine a velocidade instantânea em função do tempo, usando cálculo simbólico (sympy). 
#Faça o gráfico da velocidade em função do tempo de 0 a 4 s, usando matplotlib.  sy.diff 

v_expr = sy.diff(y_expr, t)
v_expr_simpl = sy.simplify(v_expr)
print("Expressão de v(t):", v_expr_simpl)

v_lam = sy.lambdify(t, v_expr_simpl, "numpy")
v_vals = v_lam(t_vals)

plt.plot(t_vals, v_vals)
plt.xlabel('tempo (s)')
plt.ylabel('velocidade (m/s)')
plt.title('Velocidade do Volante de Badmington')
plt.grid()
plt.show()


#3
# Determine a aceleração instantânea em função do tempo, usando cálculo simbólico. 
#Faça o gráfico da aceleração em função do tempo de 0 a 4 s, usando o pacote matplotlib

a_expr = sy.diff(v_expr, t)
a_expr_simpl = sy.simplify(a_expr)
print("Expressão de a(t):", a_expr_simpl)

a_lam = sy.lambdify(t, a_expr_simpl, "numpy")
a_vals = a_lam(t_vals)

plt.plot(t_vals, a_vals)
plt.xlabel('tempo (s)')
plt.ylabel('aceleração (m/s^2)')
plt.title('Aceleração do Volante de Badmington')
plt.grid()
plt.show()


#4
# Mostrar que a(t) = g - (g/v_T²)*v(t)²

expr = g - (g / v_T**2) * v_expr_simpl**2
expr_simpl = sy.simplify(expr)
verificacao = sy.simplify(a_expr_simpl - expr_simpl) 
print("Verificação de a(t) = g - (g/v_T²)*v(t)²:")
sy.pprint(verificacao)  # Se a expressão for 0, a verificação está correta.




#5
# Resolver a equação y(t) = 20 para encontrar o tempo de queda com resistência do ar

t_sol = sy.nsolve(y_expr - 20, 3)  # chute inicial: 3 segundos
print("\nTempo de queda com resistência do ar (quando y(t) = 20 m):")
print(t_sol)

# Tempo de queda sem resistência do ar (queda livre)
# Para queda livre, y = 1/2 * g * t²  =>  t = sqrt(2*y/g)
t_free = sy.sqrt(2 * 20 / g)
print("\nTempo de queda sem resistência do ar (queda livre):")
print(t_free)