Movimiento Parabólico de Caída Libre en Python

El modelo del movimiento parabólico de caída libre es uno de los primeros modelos físicos que se empezaron a estudiar con la aparición del calculo diferencial e integral.

Movimiento Parabólico de Caída Libre

$${\large \begin{equation} \frac{d^2 r}{dt^2} = -g\hat{j} \end{equation} }$$

Componente Horizontal y Vertical del MPCL

$${\large \begin{align*} \frac{dx}{dt} &= v_{x} \hspace{1.2cm} & \hspace{1.2cm} \frac{dy}{dt} &= v_{y} \\ \\ \frac{dv_{x}}{dt} &= 0 \hspace{1.2cm} & \hspace{1.2cm} \frac{dv_{y}}{dt} &= -g \end{align*} }$$

Donde g representa a la aceleración de la gravedad

Las soluciones de las ecuaciones diferenciales del movimiento parabólico tanto en el eje X como en el eje Y son las siguientes:

$$ {\large \begin{align*} x(t) &= v_{x}t \\ y(t) &= v_{y}t - \frac{gt^2}{2} \end{align*}}$$

Donde ${\large v_{x}}$ es la componente horizontal de la velocidad y ${\large v_{y}}$ es la componente vertical de la velocidad

Movimiento Parabólico con velocidad ${\large v = 200 \hspace{0.1cm} m/s}$ y ángulo ${\large \theta = 45^{\circ}}$


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.patches as mpatches
import matplotlib.pyplot as plt
from celluloid import Camera
from IPython.display import HTML

Ahora iniciaremos el código respectivamente

Código Fuente del Movimiento Parabólico de Caída Libre

def mpcl(v,b):
    
    """ v = velocidad de lanzamiento
        b = es el angulo de elevacion"""
    
    tv = (v/4.9)*np.sin(b)
    
    t = np.linspace(0, tv, 500)
    x = v*np.cos(b)*t
    y = v*np.sin(b)*t - (4.9)*(t**2)
    T = t
    
    fig=plt.figure(figsize=(14,8))
    camera = Camera(fig)
    ax1=fig.add_subplot(2,2,(1,2))
    ax2=fig.add_subplot(2,2,3)
    ax3=fig.add_subplot(2,2,4)
    
    plt.suptitle("Movimiento Parábolico v = {} $m/s$, $\theta = $ {}$^\circ$".format(v,(180/np.pi)*b), fontsize=20)
    
    ax1.set_title("Trayectoria de la Particula", fontsize=20)
    ax1.set_xlabel("X", size=15)
    ax1.set_ylabel("Y", rotation=0, size=15)
    ax2.set_title("Movimiento en el eje X", fontsize=20)
    ax2.set_xlabel("Tiempo", size=15)
    ax2.set_ylabel("X", rotation=0, size=15)
    ax3.set_title("Movimiento en el eje Y", fontsize=20)
    ax3.set_xlabel("Tiempo", size=15)
    ax3.set_ylabel("Y", rotation=0, size=15)
    
    plt.tight_layout()
    
    for i in range(500):
        t_i = t[0:i]
        x_i = v*np.cos(b)*t_i
        y_i = v*np.sin(b)*t_i - (4.9)*(t_i**2)
        head = i - 1
        ax1.plot(x_i, y_i, color="k", ls="-", lw="3")
        ax1.plot(x[head], y[head], color='r', marker='o', markeredgecolor='r', lw = 6, ms = 20)
        ax1.text((1/19.6)*np.sin(b)*v**2, (1/39.2)*(v*np.sin(b))**2, 't = %.1f s' % t[i], fontsize=20)
        ax2.plot(t_i, x_i, color="k", ls="-", lw="3")
        ax2.plot(T[head], x[head], color='r', marker='o', markeredgecolor='r', lw = 6, ms = 20)
        ax2.text((1.2*v/9.8)*np.sin(b), (1/29.4)*np.sin(b)*v**2, 't = %.1f s' % t[i], fontsize=20)
        ax3.plot(t_i, y_i, color="k", ls="-", lw="3")
        ax3.plot(T[head], y[head], color='r', marker='o', markeredgecolor='r', lw = 6, ms = 20)
        ax3.text((v/9.8)*np.sin(b), (1/39.2)*(v*np.sin(b))**2, 't = %.1f s' % t[i], fontsize=20)
        camera.snap()

    animation = camera.animate(interval=10, blit=True)
    return HTML(animation.to_html5_video())

Aplicación del código fuente

mpcl(200, np.pi/4)



Comentarios