File size: 3,118 Bytes
36552fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import numpy as np
import matplotlib.pyplot as plt
import gradio as gr
from PIL import Image

def calcular_mru(v, t_max):
    t = np.linspace(0, t_max, 100)
    x = v * t
    return t, x, np.full_like(t, v), np.zeros_like(t)

def calcular_mruv(v0, a, t_max):
    t = np.linspace(0, t_max, 100)
    x = v0 * t + 0.5 * a * t**2
    v = v0 + a * t
    return t, x, v, np.full_like(t, a)

def graficar(tipo_movimiento, v0, v, a, t_max):
    plt.figure(figsize=(15, 10))

    # Título específico según el tipo de movimiento
    if tipo_movimiento == "mru":
        plt.suptitle("Calculadora gráfica de Movimiento Rectilíneo Uniforme (MRU)", fontsize=16, fontweight='bold')
    elif tipo_movimiento == "mruv":
        plt.suptitle("Calculadora gráfica de Movimiento Rectilíneo Uniforme Variado (MRUV)", fontsize=16, fontweight='bold')

    if tipo_movimiento == "mru":
        t, x, v, a = calcular_mru(v, t_max)
        plt.subplot(3, 1, 1)
        plt.title("Posición vs Tiempo")
        plt.xlabel("Tiempo (s)")
        plt.ylabel("Posición (m)")
        plt.plot(t, x, color='blue')
        plt.grid()

        plt.subplot(3, 1, 2)
        plt.title("Velocidad vs Tiempo")
        plt.xlabel("Tiempo (s)")
        plt.ylabel("Velocidad (m/s)")
        plt.plot(t, v, color='orange')
        plt.grid()

        plt.subplot(3, 1, 3)
        plt.title("Aceleración vs Tiempo")
        plt.xlabel("Tiempo (s)")
        plt.ylabel("Aceleración (m/s²)")
        plt.plot(t, a, color='green')
        plt.grid()

    elif tipo_movimiento == "mruv":
        t, x, v, a = calcular_mruv(v0, a, t_max)
        plt.subplot(3, 1, 1)
        plt.title("Posición vs Tiempo")
        plt.xlabel("Tiempo (s)")
        plt.ylabel("Posición (m)")
        plt.plot(t, x, color='blue')
        plt.grid()

        plt.subplot(3, 1, 2)
        plt.title("Velocidad vs Tiempo")
        plt.xlabel("Tiempo (s)")
        plt.ylabel("Velocidad (m/s)")
        plt.plot(t, v, color='orange')
        plt.grid()

        plt.subplot(3, 1, 3)
        plt.title("Aceleración vs Tiempo")
        plt.xlabel("Tiempo (s)")
        plt.ylabel("Aceleración (m/s²)")
        plt.plot(t, a, color='green')
        plt.grid()

    plt.tight_layout(rect=[0, 0.03, 1, 0.95])  # Ajustar para no superponer el título
    plt.savefig('plot.png')  # Guardar la figura
    plt.close()  # Cerrar la figura
    return Image.open('plot.png')  # Cargar y retornar la imagen

# Interfaz de Gradio
inputs = [
    gr.Dropdown(["mru", "mruv"], label="Tipo de Movimiento"),
    gr.Number(label="Velocidad Inicial (m/s)", value=0),
    gr.Number(label="Velocidad (m/s)", value=0),
    gr.Number(label="Aceleración (m/s²)", value=0),
    gr.Number(label="Tiempo Máximo (s)", value=10)
]

output = gr.Image()  # Salida como imagen

# Añadir título a la interfaz
gr.Interface(fn=graficar, inputs=inputs, outputs=output,
             title="Calculadora gráfica de Movimiento Rectilíneo UNAD CIP DOSQUEBRADAS",
             description="Una herramienta para calcular y graficar los movimientos rectilíneos uniformes y uniformemente variados.").launch()