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

Visualisierung einer Blickwinkeländerung im 3D-Plot

 

AgentZero
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 06.06.12
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 06.06.2012, 22:28     Titel: Visualisierung einer Blickwinkeländerung im 3D-Plot
  Antworten mit Zitat      
Hallo zusammen,

ich bin ein blutiger MATLAB Anfänger und habe folgendes Problem: Ich möchte die Funktion U=XY zunächst graphisch darstellen und danach den Blickwinkel ändern. Ausgangspunkt soll die Draufsicht von oben sein, sprich az=0 und el=90. Am Ende soll der Blickwinkel bei az=25 und el=15 liegen. Den Übergang möchte ich nun gerne in einem Video zeigen. Hier beginnen nun leider meine Probleme. Die Funktion mit 'surf' darzustellen und über 'view' den Blickwinkel zu ändern bekomme ich noch hin. Zum Erstellen des Videos hab ich dann 'getframe' verwendet und wollte mit einer Schleife den Winkel in 1° Schritten ändern - funktioniert aber leider nicht. Hier mal mein Code (ich habe zum Ausprobieren zunächst nur EINEN Winkel geändert, scheitere aber schon daran):

Code:

for j=0:1:25
[X,Y] = meshgrid(0:0.05:5, 0:0.05:5);
U = X.*Y;
surf(X,Y,U)
shading interp
F(j) = getframe;
end
movie(F,1)
 


Die Fehlermeldung kommt immer bei der Zeile mit 'getframe'. Ich habe schon danach gegoogelt und den help Befehl in MATLAB zu Rate gezogen, komme aber nicht weiter, da dann in diesen Hilfen meistens wieder andere Befehle auftauchen, die ich nicht verstehe. In einem pdf Intro zu MATLAB habe ich gelesen, ich solle doch mit get(gca,’View’) arbeiten, was mich aber auch nicht weiterbringt.
Über Hilfestellungen wäre ich also wirklich sehr, sehr dankbar!
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.06.2012, 12:08     Titel: Re: Visualisierung einer Blickwinkeländerung im 3D-Plot
  Antworten mit Zitat      
Hallo AgentZero,

Herzlich willkommen im Forum und bei Matlab.

Es ist immer hilfreich, wenn Du die Fehlermeldung ebenfalls postest. Bisher wissen wir nur, dass Du eine bekommst, aber nicht welche. Dank des geposteten Codes kann man das aber zumindest nach-produzieren - sehr gut.

Der Code enthält gar keinen VIEW Befehl.
Das Erzeugen des SURF-Objektes macht man am besten ausserhalb der Schleife. Dann ändere ich mal den einen Winkel, da ich nicht genau verstanden habe, was Du erreichen möchtest:
Code:
[X,Y] = meshgrid(0:0.05:5, 0:0.05:5);
U = X.*Y;
surf(X,Y,U)
shading interp
FigH = gcf;

for j = 0:25
   view([15, j]);
   drawnow;
   F(j + 1) = getframe(FigH);
end
movie(F,1)

Das Ergebnis ist noch nicht ganz zufriedenstellend, weil MOVIE die AXES an der oberen rechten Ecke darstellt. Aber es ist schon mal ein Schritt weiter.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
AgentZero
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 06.06.12
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 07.06.2012, 18:05     Titel:
  Antworten mit Zitat      
Hallo Jan,

erstmal vielen, vielen Dank für deine Hilfe! Damit bin ich schon einen großen Schritt weiter! Um zu verstehen, was du genau an dem Code verändert hast, habe ich noch 2 Fragen:

1. Was genau bewirkt die Zeile FigH=gcf? Habe den Code mal ohne diese Zeile laufen lassen und merke aber keinen Unterschied.

2. Warum schreibst du in der Zeile mit getframe F(j+1) und nicht lediglich F(j)?

Allerdings muss ich nun noch beide Achsen gleichzeitig ändern. Wie gesagt, Ausgangspunkt ist die Sicht von oben auf die X,Y-Ebene, also view(0,90) und Endpunkt soll view(25,15) sein. Ich würde nun einfach zwei Schleifen schreiben. Einmal eben i=0:1:25 und einmal j=90:-1:25. Allerdings weiß ich nicht, in wie weit ich die Zeile F(j+1)=getframe(FigH) nun abändern muss. Wäre super, wenn du mir nochmals helfen könntest! Vielen Dank und beste Grüße,
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
AgentZero
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 06.06.12
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 16.06.2012, 12:22     Titel:
  Antworten mit Zitat      
Falls jemand ein ähnliches Problem haben sollte: Hab es nun hinbekommen, dass sich beide Achsen gleichzeitig drehen. Die Idee mit den beiden Schleifen war natürlich Schwachsinn, da die Schleifen ja nicht gleichzeitig ablaufen. Hier also mal mein Code:

Code:

[X,Y] = meshgrid(0:0.05:5, 0:0.05:5);
U = X.*Y;
surf(X,Y,U)
shading interp
FigH = gcf;

for i = 0:1:75
    alpha=i./3
    beta=-i + 90
    view([alpha, beta]);
    drawnow;
    F(i+1) = getframe(FigH);
end

movie(F,1)
 


Einziges kleines Problem ist noch, dass das Video 2x abgespielt wird und die Achsen beim 2. Abspielen auf einmal nach rechts oben verschoben werden. Vielleicht hat ja jemand eine Idee woran das liegen könnte!?
Private Nachricht senden Benutzer-Profile anzeigen
 
AgentZero
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 06.06.12
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 23.07.2012, 17:58     Titel:
  Antworten mit Zitat      
Mal wieder eine kleine Frage, vielleicht hat ja diesmal jemand eine Lösung parat: Es handelt sich wieder um meine Funktion U=XY. Nachdem ich es nun hinbekommen habe, die Funktionen zu ploten und auch den Blickwinkel zu ändern, möchte ich nun noch Höhenlinien hinzufügen. Z.B. alle X,Y Kombinationen, die zu einem U-Niveau von 50 bzw 100 führen. Mit dem Befehl contour(X,Y,U) sollte es ja eigentlich funktionieren. Allerdings liefert mir MATLAB nur Höhenlinien zu einem U-Niveau von 0 - obwohl die X und Y Werte positiv sind...

Hier mal mein Code: Einfach mal durchlaufen lassen, dann wird schnell klar was ich meine. Während der surf Befehl einwandfrei läuft und mir U als Produkt aus X und Y darstellt, macht contour Probleme.

Code:

[X,Y] = meshgrid(0:0.5:10, 0:0.5:10);
U = X.*Y;
surf(X,Y,U);

hold on
contour(X,Y,U)

colormap(gray);
shading interp;

FigH = gcf;

for i = 0:1:75
    alpha=i./3;
    beta=-i + 90;
    view([alpha, beta]);
    drawnow;
    F(i+1) = getframe(FigH);
end

movie(F,0)

 


Ich denke, dass es sich nur um eine Kleinigkeit handeln muss, komme aber selbst nicht drauf und wäre daher wirklich sehr dankbar, wenn jemand mal einen Blick drauf werfen könnte!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.07.2012, 13:51     Titel:
  Antworten mit Zitat      
Hallo AgentZero,

Antworten zu Deinen alten Fragen:
Zitat:
1. Was genau bewirkt die Zeile FigH=gcf?

GCF ist eine Funktion und benötigt deshalb Zeit. Die Antwort in einer lokalen Variable zu speichern ist effizienter. Zudem ändert sich GCF sobald man in eine ander Figure klickt.

Zitat:
2. Warum schreibst du in der Zeile mit getframe F(j+1) und nicht lediglich F(j)?

Weil j bei 0 startet, als Index von F aber größer als 0 sein muss.

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