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

Schiebeschalten zum Live-Ändern einer Größe

 

iprecious
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 04.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2011, 15:27     Titel: Schiebeschalten zum Live-Ändern einer Größe
  Antworten mit Zitat      
Moin auf's Forum,


nachdem ich ich nun bisher bei vielen Problemstellungen hier durch liebes google schweigender Weise Hilfe gefunden habe, kann ich mein jetziges Problem nicht formulieren, weil ich die korrekten Schlagwörter nicht weiß.

Das Problem ist wie folgt:

Ich habe ein Programm gebastelt, was eine Verkehrssimulation darstellt. Man kann auswählen, wieviel Autos die Kolonne besitzt und schon geht's los. Jedes dieser Autos hat eine zuvor per Zufallgenerator festeglegte Maximalgeschwindigkeit, die sich an einem StVO-Wert orientiert, der per Benutzerabfrage fesgelegt wird.

Nun ist das Programm ziemilch undynamisch, wenn das vorderste Auto immer mit einer konstanten Geschwindigkeit fährt. Aus diesem Grund würde ich gern einen kleinen Schieberegler, mit dem ich wählen kann wie schnell das erste Auto fahren soll.

Ich hab halt eine laufende while 1-(Endlos-)Schleife. Wenn ich nun am Schieberegler einen Wert einstelle (vmax(1)), soll sich eben diese Variable, die zu Beginn der Schleife verwendet wird, mitändern.

Da ich bislang nur ein Semester Numerik an der Uni hatte und MatLab prinzipiell nur da gelernt habe: Nehmt bitte Rücksicht auf jemanden, dem nicht alle Fachtermini vertraut sind Smile


Vielen Dank für etwaige Tips im Voraus!!!
Private Nachricht senden Benutzer-Profile anzeigen


Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 06.04.2011, 09:09     Titel:
  Antworten mit Zitat      
Hey,

wo liegt denn jetzt dein konkretes Problem? Hast du Probleme einen Slider zu implementieren?

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
iprecious
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 04.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2011, 10:16     Titel:
  Antworten mit Zitat      
Moin,


also im ersten Moment fehlte mir einfach das Schlagwort: Slider. Da bin ich gestern NAchmittag irgendwann drauf gekommen.

Worauf ich dann gestoßen bin ist folgendes:

http://www.mathworks.com/help/techdoc/ref/uicontrol.html

Das Problem für mich besteht nun darin, dass ich nicht richtig verstehe, wie ich den Wert des Sliders in die Schleife bringe, sprich: ich begreife nicht genau, wie der Slider funktioniert.

Momentan sieht es in etwa so aus:

Code:


%... Defintion der jeweiligen Variablen und so Zeugs

%Erstellen des Initialplots
%---------------------------
bild = plot(s,2,'.','EraseMode','xor','MarkerSize',40);
set(gcf,'Position',[38 351 1500 476]);
axis([s(N)-1000 s(N)+1000 0 3])                 %Achsenabmessungen
uicontrol('Style', 'slider',...
        'Min',0,'Max',200,'Value',100,...
        'Position', [50 50 20 200],...
        'Callback', @speedy);
uicontrol('Style','text',...
        'Position',[40 270 50 20],...
        'String','v_max');

%fortlaufende Näherungen in Endlosschleife
%-----------------------------------------------
while 1          
    if v(N)<vmax(N)*0.5 %Anpassungen fuer das erste Auto
            A_s(N,N) = 0;
            A_v(N,N) = 0;
            b(N) = amax(N)*0.5;
    elseif v(N)>vmax(N)*0.5    %Einhalten der Hoechstgeschwindigkeit
        A_s(N,N) = 0;
        A_v(N,N) = 0;
        b(N) = -amax(N);
    else
        A_s(N,N) = 0;
        A_v(N,N) = 0;
        b(N) = 0;
    end

%... hier fehlt die Anpassung für die anderen Autos

s = s + h*v;    %eigentliche Approximation
    v = abs(v + h*(A_s*s + A_v*v + b)); %abs verhindert Hin- und herpendeln

    pause(h/10)  %Verzoegerung
    drawnow
    axis([s(N)-200 s(N)+200 0 3])                 %Achsenabmessungen
    set(bild,'XData',s,'YData',2*ones(1,N)) %Quelle der Neu-Plots
end
end

function speedy(hObj,event)
    vmax(N) = get(hObj,'Value');
end
 


Insbesondere der letzte Teil, also die Funktion speedy ist glaub ich totaler Müll.

Ich hab halt gestern einfach ein bisserl rumgespielt und versucht, irgendwie den Wert als Maximalgeschwindigkeit des ersten Autos (vmax(N)) zu definieren, aber bislang bin ich kläglich gerscheitert ... Smile

Ich hoffe, das hilft, das (mein) Problem ein bisserl deutlicher zu machen.


Viele Grüße und danke für Ideen im Voraus
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 06.04.2011, 10:36     Titel:
  Antworten mit Zitat      
Hey,

versuch doch mal folgendes:
Code:

while 1
    drawnow % kurze pause, damit cb speedy ausgeführt werden kann
    if isappdata(0,'vmax')
         vmax(N) = getappdata(0,'vmax');
         rmappdata(0,'vmax');
    end

    if v(N)<vmax(N)*0.5 %Anpassungen fuer das erste Auto
            A_s(N,N) = 0;
            A_v(N,N) = 0;
            b(N) = amax(N)*0.5;
    elseif v(N)>vmax(N)*0.5    %Einhalten der Hoechstgeschwindigkeit
        A_s(N,N) = 0;
        A_v(N,N) = 0;
        b(N) = -amax(N);
    else
        A_s(N,N) = 0;
        A_v(N,N) = 0;
        b(N) = 0;
    end
% ....
end


function speedy(hObj,event)
vmax = get(hObj,'Value');
setappdata(0,'vmax',vmax)
end
 


Ich hoffe, dass ichs richtig verstanden habe...

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
iprecious
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 04.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2011, 10:48     Titel:
  Antworten mit Zitat      
Perfekt, that's it!!!

Magst Du mir kurz erklären, wie das prinzipiell abläuft? Mag ungern Dinge "lernen" ohne sie zu lernen Wink


Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 06.04.2011, 10:53     Titel:
  Antworten mit Zitat      
Hey,

alles zu (set,- get-, rm)appdata findest du auch gut in der Hilfe...

Code:

while 1
    drawnow % kurze pause, damit cb speedy ausgeführt werden kann
    if isappdata(0,'vmax') % check ob die Variable gespeichert wurde
         vmax(N) = getappdata(0,'vmax'); % Variable laden
         rmappdata(0,'vmax');% Variable Löschen
    end

    if v(N)<vmax(N)*0.5 %Anpassungen fuer das erste Auto
            A_s(N,N) = 0;
            A_v(N,N) = 0;
            b(N) = amax(N)*0.5;
    elseif v(N)>vmax(N)*0.5    %Einhalten der Hoechstgeschwindigkeit
        A_s(N,N) = 0;
        A_v(N,N) = 0;
        b(N) = -amax(N);
    else
        A_s(N,N) = 0;
        A_v(N,N) = 0;
        b(N) = 0;
    end
% ....
end


function speedy(hObj,event)
vmax = get(hObj,'Value');
setappdata(0,'vmax',vmax) % speichern der Variable im handle 0 (müsste der Matlab Desktop sein)
end
 


MfG Marco
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.