goMatlab - Mein MATLAB Forum

Mein MATLAB Forum

 
Login  | Registrieren
Bücher:


Studierende:
Projektunterstützung bei Wärmeberechnungen
Kfz-Zulieferindustrie
ZF Friedrichshafen AG - Friedrichshafen

Entwicklung einer Standard-Fahrzeugrestbus-Simulationsumgebung
Kfz-Zulieferindustrie
MBtech Group GmbH & Co. KGaA - Sindelfingen bei Stuttgart / Mönsheim

Lebensdauermodell für Lithium-Ionen-Batterien
Kfz-Zulieferindustrie
ZF Friedrichshafen AG - Friedrichshafen

Praktikum Strategieanalyse für Institutionelle Kunden
Banken
DekaBank Deutsche Girozentrale - Frankfurt am Main

Praktikant/Werkstudent (m/w)
Telekommunikation
OnePhone Deutschland GmbH - Erkrath

weitere Angebote

Partner:




Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite 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
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



Options and Permissions
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2012 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.