Saltar al contenido
Control Automático Educación

Grafica Animada en 2D con MATLAB

Hola controleros y controleras bienvenidos a otro post del sitio web donde aprenderemos a hacer una Grafica Animada en 2D con MATLAB y veremos algunos comandos básicos usados en la programación de interfaces gráficas.

Antes que nada, te invito a que le des un vistazo a nuestro CURSO DE MATLAB PARA PRINCIPIANTES

Grafica Animada en Matlab

Lo que veremos hoy será algo muy básico pero sumamente atractivo y útil, principalmente porque con este código podremos hacer proyectos futuros con nuestro curso de microcontroladores.

Inicialmente lo que vamos a hacer es ANIMAR la evolución de las funciones SENO y COSENO vistas en la entrada pasada de Grafica en 2D con MATLAB.

Vamos a crear la siguiente Grafica Animada en Matlab, donde vamos a identificar cada una de sus partes

Interfaz de Matlab

Comandos de Interfaz de Matlab

Lo primero que haremos es crear la figura, junto con todos sus atributos, como por ejemplo el tamaño de la figura, el titulo o nombre de la figura, el color de fondo.

%Crea una figura, le establece nombre, posición y color
fig(1)=figure('name','Monitor','menubar','none','position',[200 200 800 700],'color',[0.9 0.6 0.3])

Luego procedemos a crear el AXE dentro de la figura anterior, con todos sus parámetros como tamaño, rejillas. Y algo importante es que el AXE lo asignamos a un padre, el cual será la figura creada anteriormente. Y con la función set o incluso dentro del propio AXE podemos cambiar o nombrar las etiquetas.

axe(1)=axes('parent',fig(1),'units','pixels','position',[60 80 600 550],'xlim',[0 40],'ylim',[-3 3],'xgrid','on','ygrid','on')
%Modifica las etiquetas del eje x y y de el AXE
set(get(axe(1),'XLabel'),'String','Tiempo (Seg)')
set(get(axe(1),'YLabel'),'String','Función')

Luego procedemos a crear las lineas que colocaremos dentro del AXE, por lo tanto el AXE será el padre de las lineas. También configuramos el color de lineas y el grosor.

%Crea las lineas que se van a graficar en el axe, con su color y grosor
%correspondientes
lin(1)=line('parent',axe(1),'xdata',[],'ydata',[],'Color','r','LineWidth',2.5);
lin(2)=line('parent',axe(1),'xdata',[],'ydata',[],'Color','k','LineWidth',2);

Creamos cuadros de texto dentro de la interfaz para mostrar puntos de interés al usuario o para indicar algún resultado.

txbx(1)=uicontrol('parent',fig(1),'style','text','string','Función Seno','position',[680 170 100 50],'background',[0.9 0.6 0.3],'callback',@texto,'fontsize',11)
txbx(2)=uicontrol('parent',fig(1),'style','text','string','Seno','position',[680 150 100 50],'callback',@texto,'fontsize',11)
txbx(3)=uicontrol('parent',fig(1),'style','text','string','Función Coseno','position',[680 270 100 50],'background',[0.9 0.6 0.3],'callback',@texto,'fontsize',11)
 

Colocamos botones con los cuales el usuario podrá interactuar con nuestro programa, en este caso colocaremos 2 botones en la grafica animada de matlab, colocaremos un botón detener para que el sistema pare de graficar y un botón coseno para graficar el coseno en el AXE. Estos botones crean funciones las cuales deben ser programadas para que realicen el evento del botón.

%Crea botones y cuadros de texto dentro de la figura.
bot(1)=uicontrol('parent',fig(1),'style','pushbutton','string','Detener','position',[680 50 100 50],'callback',@stop,'fontsize',11)
bot(2)=uicontrol('parent',fig(1),'style','pushbutton','string','Coseno','position',[680 250 100 50],'callback',@coseno,'fontsize',11)

Graficando con interfaz en MATLAB

A continuación te dejo el código completo para que lo descargues y lo copies en tu compilador, y lo modifiques para que haga más cosas o grafique más funciones.

[sociallocker id=948]

%% Ejemplo de Graficas Animadas en MATLAB
function varargout=animacion(varargin)
parar=false;FCos=false;
%Crea una figura, le establece nombre, posición y color
fig(1)=figure('name','Monitor','menubar','none','position',[200 200 800 700],'color',[0.9 0.6 0.3])
%Comando que mueve la figura al Centro de la pantalla
movegui(fig(1),'center');
%Crea un AXE, dentro de la Figura, establece la posicion y los limites
axe(1)=axes('parent',fig(1),'units','pixels','position',[60 80 600 550],'xlim',[0 40],'ylim',[-3 3],'xgrid','on','ygrid','on')
%Modifica las etiquetas del eje x y y de el AXE
set(get(axe(1),'XLabel'),'String','Tiempo (Seg)')
set(get(axe(1),'YLabel'),'String','Función')

%Crea las lineas que se van a graficar en el axe, con su color y grosor
%correspondientes
lin(1)=line('parent',axe(1),'xdata',[],'ydata',[],'Color','r','LineWidth',2.5);
lin(2)=line('parent',axe(1),'xdata',[],'ydata',[],'Color','k','LineWidth',2);


txbx(1)=uicontrol('parent',fig(1),'style','text','string','Función Seno','position',[680 170 100 50],'background',[0.9 0.6 0.3],'callback',@texto,'fontsize',11)
txbx(2)=uicontrol('parent',fig(1),'style','text','string','Seno','position',[680 150 100 50],'callback',@texto,'fontsize',11)
txbx(3)=uicontrol('parent',fig(1),'style','text','string','Función Coseno','position',[680 270 100 50],'background',[0.9 0.6 0.3],'callback',@texto,'fontsize',11)
 
%Crea botones y cuadros de texto dentro de la figura.
bot(1)=uicontrol('parent',fig(1),'style','pushbutton','string','Detener','position',[680 50 100 50],'callback',@stop,'fontsize',11)
bot(2)=uicontrol('parent',fig(1),'style','pushbutton','string','Coseno','position',[680 250 100 50],'callback',@coseno,'fontsize',11)

    %% Funcion PARAR
    function varargout=stop(hObject,evendata)
        parar=true;
    end
    %% Funcion Graficar Coseno
    function varargout=coseno(hObject,evendata)
        FCos=true;
    end
    %% funcion Graficar
   % function varargout=grafique(hObject,evendata)
        tiempo=[0];
        salida=[0];
        salida2=[0];
        %Cada cuanto se va graficando en el axe
        dt=0.1;
        %Limites iniciales en el AXE
        limx=[0 40];
        set(axe(1),'xlim',limx);
              
     %% Grafico
     k=1;nit = 800;
     
        while(~parar)

            Y=2*sin(tiempo(k));
            Z=cos(4*tiempo(k)); %Crea función Coseno y lo guarda en Z
            
            if FCos == true
                set(bot(2),'string',Z);
            end
            
            set(txbx(2),'string',Y);
            
            %Actualiza las variables del grafico
             tiempo=[tiempo tiempo(end)+dt];
             salida=[salida Y];
             salida2=[salida2 Z];
             
             if FCos == true
                set(lin(2),'xdata',tiempo,'ydata',salida2);
             end
             
             %Grafico con las lineas creadas anteriormente
             set(lin(1),'xdata',tiempo,'ydata',salida);
             pause(dt); %% espera 0.1 seg para cada interación
             
             if tiempo(end)>=limx % actualizo grafica cuando llega a su limite en tiempo real
             limx=[0 limx(2)+40]
             set(axe(1),'xlim',limx) 
             end
             
             k=k+1;
             if(k==nit)
                 parar=true;
             end
        end
        parar=false;
        

   % end
end
[/sociallocker]

Finalmente podemos expresar el exponencial en matlab con la función exp(), si deseamos realizar algún calculo con exponenciales.

Crear un EXE en MATLAB

Matlab nos ofrece la posibilidad de crear programas ejecutables (EXE) para poder instalar nuestras interfaces en cualquier computador con o sin Matlab.

Para eso nos valeremos del paquete Standalone de Matlab donde usaremos el MATLAB COMPILER para generar EXE o ejecutables con el software e instalarlo en nuestros ordenadores.

En el siguiente video, te muestro como tomar la interfaz gráfica GUI de Senos y Cosenos y lo convertimos en un ejecutable en MATLAB.


Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (4)

Hola que tal amigo, he seguido tus videos de graficas, y justo estoy creando un proyecto de un programa de funciones y tengo algunas ideas, y preguntas, yo como puedo hacer para que el usuario pueda al momento de dar clic en un punto le aparezcan los intervalos, o si tiene mucho rango, el usuario pueda ampliar la grafica.

Responder

Hola Carlos, cuando realizas gráficos en Matlab las gráficas ya tienen embutida esa característica, las opciones aparecen en la esquina superior derecha de la grafica, alli puedes ver los puntos al darle click a la gráfica o ampliar y disminuir.

Responder

Hola Sergio, resulta que si, si plotas una gráfica pues te aparece eso, pero en guide o bueno en mi caso, estoy usando ezplot pero no me aparece, investigué y para el zoom me tocó usar zoom “on” y pues agregarle un menú de herramientas, pero para que me muestre los puntos dónde de click a la gráfica, no me salen y ya he buscado, te agradezco la ayuda, Un fuerte abrazo, Saludos

Responder

Pueden dejar sus comentários aquí

Responder