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

# Exercício 2. Método de Euler-Cromer orbita da Terra 

G = 4 * np.pi**2  
M = 1.0         


dt = 0.01
t0 = 0.0           
tf = 2           
n = int(tf / dt)


r0 = np.array([1.0, 0.0])

v0_array = [5, 2 * np.pi, 7]


plt.figure()

for v_initial in v0_array:
    # A velocidade inicial é perpendicular à posição (sentido y)
    v0 = np.array([0.0, v_initial])
    
    # Inicializa os arrays para posição e velocidade
    r = np.empty((n, 2))
    v = np.empty((n, 2))
    
    r[0] = r0
    v[0] = v0
    
    #Euler-Cromer
    for i in range(n - 1):

        dist = np.sqrt(r[i][0]**2 + r[i][1]**2)
        a = -G * M * r[i] / dist**3
        
        v[i + 1] = v[i] + a * dt        #atualiza a velocidade
        r[i + 1] = r[i] + v[i + 1] * dt     #atualiza a posição usando a velocidade já atualizada
    

    label = f"v0 = {v_initial:.2f} AU/ano"
    plt.plot(r[:, 0], r[:, 1], label=label)

# Configurações do gráfico:
plt.xlabel("x (AU)")
plt.ylabel("y (AU)")
plt.title("Simulação da Órbita da Terra (Método Euler-Cromer)")
plt.grid()
plt.show()



#para v0 = 2π (velocidade circular) a orbita é circular.
#Para v0 = π a orbita é elíptica (energia negativa)
#Para v0 = 3π, a orbita é aberta  (energia positiva)