El código usado en este notebook ha sido adaptado desde la versión original disponible aquí.
Una introducción general a los epiciclos y su historia puede encontrarse en la correspondiente página en Wikipedia. Un buen video (en inglés) con más detalles puede encontrarse aquí:
Primero cargamos las funciones en el módulo presentation, donde se implementan funciones que calculan los coeficientes de Fourier, el cálculo de la serie de Fourier truncada, y el código que genera la animación de los epiciclos.
In [1]:
from presentation import *
import numpy as np
In [2]:
t = np.array([0.,1,2,3,4])
x = [-10.,10,10,-10,-10]
y = [-10.,-10,10,10,-10]
In [3]:
#t = np.linspace(0,2*np.pi,1000)
#a = 1
#e = 0.5
#r = a*(1-e**2)/(1+e*np.cos(t))
In [4]:
#t = np.linspace(0,2*np.pi,1000)
#r = np.sin(t)*np.sqrt(np.abs(np.cos(t)))/(np.sin(t)+7/5.)-2*np.sin(t)+2
In [5]:
#x = r*np.cos(t)
#y = r*np.sin(t)
In [6]:
fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.plot(x,y, 'k-')
ax.plot(0,0,'x')
plt.show()
In [7]:
tau = max(t)-min(t)
order = 10
coef = coef_list(t, x, y, order)
for id,n in enumerate(range(-order,order+1)):
print('n = ',str(n),': ',coef[id])
In [8]:
space = np.linspace(min(t), max(t), 300)
x_Sn, y_Sn = Sn(space, coef, order)
In [9]:
fig, ax = plt.subplots()
ax.plot(x_Sn, y_Sn, 'r--')
ax.plot(x, y, 'k-')
ax.set_aspect('equal')
xmin, xmax = plt.xlim()
ymin, ymax = plt.ylim()
plt.show()
In [10]:
anim = visualize(x_Sn, y_Sn, tau, coef, order, space, [xmin, xmax, ymin, ymax])
#Writer = animation.writers['html']
Writer = animation.writers['ffmpeg']
writer = Writer(fps=60)
anim.save('ani.mp4',writer=writer, dpi=150)