MAS en 2D y Curva de Lissajous en Python

Una figura de lissajous es la superposición de dos MAS perpendiculares. Un MAS en el eje X y un MAS en el eje Y.

$$ {\large \begin{equation*} X(t) = A\sin{(w_{x}t + a)} \hspace{1cm},\hspace{1cm} Y(t) = B\sin{(w_{y}t + b)} \end{equation*}}$$

En este articulo se desarrollaran las figuras de lissajous con la particularidad de A=B y con un desfase ${\large \alpha = b - a}$ en Python respectivamente.

Figura de Lissajous para distintos desfases y distintas ${\large n = w_{x}/w_{y}}$


Antes de crear el código fuente es necesario que se importan algunas librerías correspondientes para compilar este código.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches
import matplotlib.patches as mpatches
from celluloid import Camera
from IPython.display import HTML

Iniciando el código, primero se definen las soluciones de los MAS correspondientes.

def lissajous(wx,wy,b):

    """ MAS en dos dimensiones con superposiciónd de ambos MAS.
    wx = frecuencia en X
    wy = frecuencia en y
    b = desfase """
    
    t = np.linspace(0, 2.5*np.pi, 500)
    
    px = np.sin(wx*t)
    py = np.sin(wy*t + b)
    T = t

    fig=plt.figure(figsize=(14,8))
    camera = Camera(fig)
    ax1=fig.add_subplot(2,2,1)
    ax2=fig.add_subplot(2,2,3)
    ax3=fig.add_subplot(2,2,(2,4))
    
    plt.suptitle("Figura de Lissajous con misma amplitud A = 1m y desfase $\alpha $ = {}$^\circ$              ".format((180/np.pi)*b), fontsize=20)

    ax1.set_xlabel("Tiempo", size=15)
    ax1.set_ylabel("X", rotation=0, size=15)
    ax1.set_title("$w_x$ = {}".format(wx), size=15)
    ax2.set_xlabel("Tiempo", size=15)
    ax2.set_ylabel("Y", rotation=0, size=15)
    ax2.set_title("$w_y$ = {}".format(wy), size=15)
    ax3.set_xlabel("X", size=15)
    ax3.set_ylabel("Y", rotation=0, size=15)
    
    plt.tight_layout()
    
    for i in range(500):
        t_i = t[0:i]
        head = i - 1
        px_i = np.sin(wx*t_i)
        py_i = np.sin(wy*t_i + b)
        ax1.plot(t_i, px_i, color="r", ls="-", lw="3")          
        ax2.plot(t_i, py_i, color="b", ls="-", lw="3")
        ax3.plot(px_i, py_i, color="k", ls="-", lw="3")
        ax1.plot(T[head], px[head], color='r', marker='o', markeredgecolor='r', lw = 6, ms = 20)
        ax2.plot(T[head], py[head], color='b', marker='o', markeredgecolor='b', lw = 6, ms = 20)
        ax3.plot(px[head], py[head], color='k', marker='o', markeredgecolor='k', lw = 6, ms = 20)
        camera.snap()
    
    animation = camera.animate(interval=10, blit=True)
    return HTML(animation.to_html5_video())

Aplicación del código fuente 

  • Cuando tienen misma amplitud A = 1m, misma frecuencia angular 1Hz, diferencia de fase de ${\large \alpha = 0 }$


  • Cuando tienen misma amplitud A = 1m, misma frecuencia angular 1Hz, diferencia de fase de ${\large \alpha = \pi/4 }$


  • Cuando tienen misma amplitud A = 1m, misma frecuencia angular 1Hz, diferencia de fase de ${\large \alpha = \pi/2 }$


  • Cuando tienen misma amplitud A = 1m, misma frecuencia angular 1Hz, diferencia de fase de ${\large \alpha = 3\pi/4 }$


  • Cuando tienen misma amplitud A = 1m, misma frecuencia angular 1Hz, diferencia de fase de ${\large \alpha = \pi }$


  • Cuando tienen la misma amplitud A = 1m para distintas frecuencias angulares y distintas diferencias de fase.
Figura de Lissajous para distintos desfases y distintas ${\large n = w_{x}/w_{y}}$


Comentarios