WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Callback für Slider um Plot zu switchen.

 

menschmarkus
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2010, 09:51     Titel: Callback für Slider um Plot zu switchen.
  Antworten mit Zitat      
Hallo,
ich habe mir selbst ein kleines GUI gebastelt. In dem GUI sollen einfach nur die Ableitungen der Gaussfunktion angezeigt werden. Ich möchte die Ableitungen mit einem geeigneten Button (Slider) durchschalten können. Ich möchte das ganze komplett ohne GUIDE machen, um meine Programmierfähigkeiten zu verbessern. Ich bin jetzt mit der Oberfläche soweit fertig und komme nun zum Callback für den Slider. Leider blicke ich da nicht durch.

Also z.B. Slider-Stellung 2/7, Ableitung 2. Ordnung im rechten Plot. Die Funktionen sind auch drinnen.

Es wäre toll, wenn mir jemand helfen könnte. Weiter unten ist der Code.
Vielen Dank im Vorraus.

EDIT: Beim durchschalten wäre wohl eine Switch-Case-Konstruktion am besten oder? So würde ich die Ableitungen alle im Code berechnen und jeweils eine Ableitung wäre dann ein case. Ich hatte erst eine for-Schleife geplant, aber ich müsste ja immer eine neue Variable schreiben für die nächste Ableitung und die Vorgängervariable in die Gradient-Funktion packen. Oder gibts da vlt. doch einen kleinen Kniff?


Code:

%% Grafische Benutzeroberfläche
function varargout = gui(varargin)

%Auslesen der Auflösung für die Position des GUIs
scrsz = get(0, 'Screensize');

%------------------------------------------------------
% Hauptfläche des GUIs
%------------------------------------------------------
MainWindow = figure('MenuBar','none',...
                    'Name','GUI - erstellt ohne GUIDE',...
                    'ToolBar','figure',...
                    'Position',[.3*scrsz(4),.2*scrsz(4),...
                                .9*scrsz(4),.7*scrsz(4)]);
%9 7
%Position: Pos L/R / Pos O/U / Breite / Höhe  

%------------------------------------------------------
% Elemente
%------------------------------------------------------
% Panels
p1 = uipanel('Parent',MainWindow,'Title','Steuerung',...
'Position',[.1 .1 .6 .2]);

% Textfelder
t1 = uicontrol(p1,'Style','text',...
                     'String','Ordnung',...
                     'FontWeight','bold',...
                     'FontSize',10,...
                     'Units', 'normalized',...
                     'Position',[.01,.7,.18,.2],...
                     'Callback', 'String');
                 
% Slider zum Einstellen der Ordnung
uicontrol(p1,'Style','slider',...
                     'Max',7,'Min',1,'Value',1,...
                     'SliderStep',[0.1 1],...
                     'Position',[20 50 60 20],...
                     'Callback', @slider1_callback);
                     %Aufruf Callback-Funktion, welche das
                     %Element steuert                    
%'SliderStep',[0.05 0.2],...
                     
%------------------------------------------------------
% Funktionalitäten
%------------------------------------------------------                    
                     
% Graphen
% Ausgangsfunktion
axes('parent', MainWindow, 'Position', [.1,.7,.2,.2]);
x=[-4:0.2:4];
xg=1/sqrt(2*pi)*exp(-1/2*x.^2);
plot(x,xg);
title('Gaussfunktion');
%xlabel('x')
%ylabel('y')

%------------------------------------------------------
% Grafiken
%------------------------------------------------------
% Auswahl des entsprechenden Axes-Objekts
axes('parent', MainWindow, 'Position', [.35,.75,.1,.1]);
% Einlesen der Grafik
G1=imread('Pfeil.jpg','jpg');
% Grafik ausgeben, Grafik entzerren
image (G1); axis image;
% Koordinatenachsen ausblenden
axis off          
     

%------------------------------------------------------
% Callbacks
%------------------------------------------------------

function slider1_callback(hObject, eventdata)

%Variablendeklaration für Switch-Case-Variable
ableitung = 'String';

% Ableitung n-ter Ordnung als Switch-Case für Callback
switch ableitung
    case 'A1'
            axes('parent', MainWindow, 'Position', [.5,.7,.2,.2]);
            xgd1=gradient(xg);
            plot(x,xgd1);
            title('Ableitung');
    case 'A2'
            axes('parent', MainWindow, 'Position', [.5,.7,.2,.2]);
            xgd2=gradient(xgd1);
            plot(x,xgd2);
            title('Ableitung');            
    case 'A3'
            axes('parent', MainWindow, 'Position', [.5,.7,.2,.2]);
            xgd3=gradient(xgd2);
            plot(x,xgd3);
            title('Ableitung');  

end
end
end



Das wäre jetzt mein Ansatz, sicherlich fehlt da noch so einiges. Muss ich für hObject, eventdata, handles noch Templates reinladen? Ich hatte oben nur function varargout = gui(varargin).

Code:

function slider1_callback(hObject, eventdata, handles)

%Variablendeklaration für Switch-Case-Variable
ableitung = 'String';

%Auslesen des Slider-Wertes
slider_wert = get(hObject, 'Value');

ableitung = slider_wert;
% Ableitung n-ter Ordnung als Switch-Case für Callback
switch ableitung
    case 1
            axes('parent', MainWindow, 'Position', [.5,.7,.2,.2]);
            xgd1=gradient(xg);
            plot(x,xgd1);
            title('Ableitung');
    case 2
            axes('parent', MainWindow, 'Position', [.5,.7,.2,.2]);
            xgd2=gradient(xgd1);
            plot(x,xgd2);
            title('Ableitung');            
    case 3
            axes('parent', MainWindow, 'Position', [.5,.7,.2,.2]);
            xgd3=gradient(xgd2);
            plot(x,xgd3);
            title('Ableitung');  

end
 
Private Nachricht senden Benutzer-Profile anzeigen


menschmarkus
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2010, 13:15     Titel:
  Antworten mit Zitat      
Ich habe mein Problem selber gelöst. Wenn noch jemand ein paar nützliche Tips geben kann, wär das natürlich toll.

Die Lösung war natürlich mal wieder einfachster Natur. Die Berechnung der Ableitungen waren in den Cases, so waren sie natürlich "eingekapselt" und für die anderen Funktionen nicht erreichbar,


Code:

%oooooooooooooooooooooooooooooooooooooooooooooooooooooo
%% Grafische Benutzeroberfläche
%oooooooooooooooooooooooooooooooooooooooooooooooooooooo
% hObject - Ist der Handle des Objekts von dem der
%           Callback ausgelöst wird.
% eventData - Wird nicht verwendet.
% handles - Struct, welches alle Handles von fast allen
%           Objekten innerhalb des GUI beinhaltet.
% GuiData - lagert alle GUI-Daten

function varargout = gui(varargin)

%------------------------------------------------------
% Hauptfläche des GUIs
%------------------------------------------------------
%Auslesen der Auflösung für die Position des GUIs
scrsz = get(0, 'Screensize');

MainWindow = figure('MenuBar','none',...
                    'Name','GUI',...
                    'ToolBar','figure',...
                    'Position',[.3*scrsz(4),.2*scrsz(4),...
                                .9*scrsz(4),.7*scrsz(4)]);
%9 7
%Position: Pos L/R / Pos O/U / Breite / Höhe  

%------------------------------------------------------
% Elemente
%------------------------------------------------------
% Panels
p1 = uipanel('Parent',MainWindow,...
'Position',[.1 .1 .6 .2]);

% Textfelder
t1 = uicontrol(p1,'Style','text',...
                     'String','Ordnung',...
                     'FontWeight','bold',...
                     'FontSize',10,...
                     'Units', 'normalized',...
                     'Position',[.01,.7,.18,.2]);
                 
% Slider zum Einstellen der Ordnung
handles.slider1 = uicontrol(p1,'Style','slider',...
                     'Max',7,'Min',1,'Value',1,...
                     'SliderStep',[0.1 1],...
                     'Position',[20 50 60 20],...
                     'Callback', @slider1_callback);
                     %Aufruf Callback-Funktion, welche das
                     %Element steuert                    
%'SliderStep',[0.05 0.2],...
                     
%------------------------------------------------------
% Funktionalitäten
%------------------------------------------------------                    
                     
% Graphen
% Ausgangsfunktion
axes('parent', MainWindow, 'Position', [.1,.7,.2,.2]);
x=[-4:0.2:4];
xg=1/sqrt(2*pi)*exp(-1/2*x.^2);
plot(x,xg);
title('Gaussfunktion');
%xlabel('x')
%ylabel('y')

% Ableitung
xgd1=gradient(xg);
xgd2=gradient(xgd1);
xgd3=gradient(xgd2);

%Graph
axes('parent', MainWindow, 'Position', [.5,.7,.2,.2]);

%------------------------------------------------------
% Grafiken
%------------------------------------------------------
% Auswahl des entsprechenden Axes-Objekts
axes('parent', MainWindow, 'Position', [.35,.75,.1,.1]);
% Einlesen der Grafik
G1=imread('Pfeil.jpg','jpg');
% Grafik ausgeben, Grafik entzerren
image (G1); axis image;
% Koordinatenachsen ausblenden
axis off          
     

%------------------------------------------------------
% Callbacks
%------------------------------------------------------
% Speichern der Struktur
guidata(MainWindow);

slider1_callback(handles.slider1);

function slider1_callback(hObject, handles)
% Laden der Struktur:
% --> Übergibt de facto das Handle des Objektes (Slider)an
%     Guidata, welches dann das Struct darstellt, wo alle
%     Handles, aller Objekte gespeichert sind.
handles = guidata(hObject);
   
% Variablendeklaration für Switch-Case-Variable
ableitung = 'String';

% Auslesen des Slider-Wertes
slider_wert = get(hObject, 'Value');

% Übergabe des Wertes an die Switch-Case-Konstruktion
ableitung = slider_wert;

axes('parent', MainWindow, 'Position', [.5,.7,.2,.2]);
% Ableitung n-ter Ordnung als Switch-Case für Callback
switch ableitung
    case 1  
            plot(x,xgd1);
            title('Ableitung');
    case 1.6
            plot(x,xgd2);
            title('Ableitung');            
    case 2.2
            plot(x,xgd3);
            title('Ableitung');  

% Updaten der Struktur
guidata(hObject,handles);
           
end
end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.