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

Zwei animierte Kurven gleichzeitig

 

gomar
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 23.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2014, 10:27     Titel: Zwei animierte Kurven gleichzeitig
  Antworten mit Zitat      
Hallo zusammen!

Ich möchte zwei parametrisierte Kurven, zB.
Kurve 1:
Code:

x1 = @(t) cos(3*t).*cos(t);
y1 = @(t) cos(3*t).*sin(t);
z1 = @(t) 1
 

Kurve 2:
Code:

x2 = @(t) cos(3*t).*cos(2*t);
y2 = @(t) cos(3*t).*sin(2*t);
z2 = @(t) 1
 

mit einer Animation plotten, sodass beide (im gleichen Fenster) gleichzeitig laufen.
mein Ansatz:
Code:

ezplot3(x1,y1,z1,[0, 2*pi], 'animate');
hold on;
ezplot3(x2,y2,z2,[0.3, 3*pi], 'animate');
 

Dabei sind die Intervalle nicht zwingend gleich. In obigem Beispiel soll also Kurve 1 etwas früher beginnen und deutlich früher aufhören als Kurve 2.

Mein Problem ist nun, dass die Animationen nur nacheinander laufen. Ich nehme mal an das liegt an dem hold on, ich habe aber keinen anderen Befehl gefunden.

Gruß, Gomar
Private Nachricht senden Benutzer-Profile anzeigen


Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 06.11.2014, 11:40     Titel:
  Antworten mit Zitat      
Hallo,

das mit ezplot und animate kannte ich noch gar nicht. Neben dder Tatsache, dass das nacheinander animiert wird, stört ja noch die Tatsache, dass die ganze Animation (zumindest bei mir) in so kurzer Zeit durchläuft, dass man nichts sieht. Hier ein Vorschlag von mir, da sieht die Animation auch irgendwie echt interessant aus.
(Für zwei Animationen kann man ja gerade noch das copy&paste und die Benennung der Funktionen verkraften, für mehrere Animationen würde man das dann sicher noch anders lösen):
Code:
x1 = @(t) cos(3*t).*cos(t);
y1 = @(t) cos(3*t).*sin(t);
z1 = @(t) ones(size(t)); % so viele einsen, wie t lang ist

x2 = @(t) cos(3*t).*cos(2*t);
y2 = @(t) cos(3*t).*sin(2*t);
z2 = @(t) ones(size(t)); % so viele einsen, wie t lang ist

% Für Animation Anzahl der Schritte und Schrittweite
nSteps = 250;
t1 = linspace(0, 2*pi, nSteps);
t2 = linspace(0.3, 3*pi, nSteps);

figure
% Blaue linien
plot3(x1(t1), y1(t1), z1(t1), 'b-')
hold on
plot3(x2(t2), y2(t2), z2(t2), 'b-')

% Rote Kreise
h(1) = plot3(x1(t1(1)), y1(t1(1)), z1(t1(1)), 'ro', 'markerfacecolor','red');
h(2) = plot3(x2(t2(1)), y2(t2(1)), z2(t2(1)), 'ro', 'markerfacecolor','red');

% Animation der roten Kreise
for n = 2:nSteps
    % Position der roten Kreise verändern
    set(h(1), 'XData',x1(t1(n)), 'YData', y1(t1(n)), 'ZData', z1(t1(n)))
    set(h(2), 'XData',x2(t2(n)), 'YData', y2(t2(n)), 'ZData', z2(t2(n)))
    pause(0.05) % kleine Pause, damit man auch etwas sieht
    title(sprintf('t1 = %.2f, t2 = %.2f',[t1(n), t2(n)]))
end


Viele Grüße,
Nras
Private Nachricht senden Benutzer-Profile anzeigen
 
gomar
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 23.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2014, 12:16     Titel:
  Antworten mit Zitat      
Hallo,

danke für die schnelle Antwort, es hat mich einge Zeit gekostet das ganze (einigermaßen) nachzuvollziehen =D.
Zitat:

(Für zwei Animationen kann man ja gerade noch das copy&paste und die Benennung der Funktionen verkraften, für mehrere Animationen würde man das dann sicher noch anders lösen):

Stimmt! Die von mir gegebenen Kurven waren auch bloß allgemeine Beispiele. Mittlerweile arbeite ich mit einer Funktion Curve, die jedem Zeitpunkt des Vektors t eine 3D Position zuweist, zB
Code:

function [y] = Curve(t)
y = rand(length(t),3);
end
 

Der Code den ich verwende sieht anders aus, aber ist schwer wiederzugeben, weil sich meineCurve.m auch noch auf andere Funktionen bezieht.
Nun möchte ich zwei 'ähnliche' solcher Kurven Plotten:
Code:

function [] Plot = (t1, t2)
A  = Curve1(t1);
B = Curve2(t2;
figure
plot3(A(:,1), A(:,2), A(:,3));
hold on
plot3(B(:,1), B(:,2), B(:,3));

h(1) = plot3(A(1,1), A(1,2), A(1,3), 'ro', 'markerfacecolor', 'red');
h(2) = plot3(B(1,1), B(1,2), B(1,3), 'ro', 'marker', 'x', 'markerfacecolor', 'black');

for n = 2:min((length(t1),length(t2)))
set(h(1), 'XData', A(n,1), 'YData', A(n,2), 'ZData', A(n,3));
set(h(2), 'XData', B(n,1), 'YData', B(n,2), 'ZData', B(n,3));
pause(0.05)
end
end    
 

Mir ist es wichtig die Unterschiede der beiden Kuven sichtbar zu machen. allerdings funktioniert es bei mir nicht 'makerfacecolor' auf 'black' zu setzten..
Gibt es darüber hinaus eine Möglichkeit, das ganze höher aufzulösen?
Und auch ein 'Replay'-Button im figure wäre nicht schlecht! Oder steht diese Funktion nur mit ezplot zur Verfügung?

Gruß, Gomar
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.