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

Rotation der 3D-Grafiken

 

puerto
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.08.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2007, 13:05     Titel: Rotation der 3D-Grafiken
  Antworten mit Zitat      
Hallo Gemeinde!

Ich habe einen Wünsch, leider keine Realisierung dafür:
Die mit Matlab erstellten 3D-Grafiken lassen sich um beliebige Drehachse einfach rotieren und in der Rotation bleiben. Ich möchte diese permanente Rotation an meine Präsentation in Powerpoint einbinden, weil dies sehr anschaulicher ist als stehende. Ist das möglich? Kennt jemand möglicherweise einen Lösungsansatz?

Danke.
Puerto
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 29.08.2007, 13:50     Titel:
  Antworten mit Zitat      
Hallo puerto,

wie machst du das, dass die Grafiken in der Rotation bleiben? Brauchst Du eine spezielle Toolbox? Ich habe nämlich noch nicht gefunden, wie das geht.

Wenn ich Einzelbilder für eine Powerpoint-Präsentation zu einem Film zusammensetzen will, wandle ich sie in Variablen um (import data im workspace) und arbeite dann mit den Befehlen
Code:

Bei letzterem ist es bei mir nötig, den Parameter 'compression' auf den Wert 'none' zu setzen.

Wenn Du auch Einzelbilder der Rotation generieren kannst, erkläre ich gern genauer, was man machen muss, um eine Animation zu bekommen.

Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
puerto
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.08.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2007, 14:38     Titel:
  Antworten mit Zitat      
Hallo Bijick!

Im Orbit Camera Modus klicke auf Diagramm mit linker Maustaste und bei der Bewegung in gewünschte Richtung loslassen.

Gruss
Puerto
Private Nachricht senden Benutzer-Profile anzeigen
 
puerto
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.08.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2007, 15:49     Titel:
  Antworten mit Zitat      
Hallo Bijick,


Die Befehle
Code:
habe ich ausprobiert und die Beispiele gehen eingermassen. Vielen Dank für Hinweis!
Einziges was nicht geht ist, wie lässt sich die Grafik in Rotation um eine definierbare Achse bringen, d.h. mit welchem Befehl?

Grüße
Puerto
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 29.08.2007, 16:05     Titel:
  Antworten mit Zitat      
Das ist ja cool, habe ich mal wieder was gelernt. Manuell nachmachen kann man das mit dem Befehl camorbit. Dazu gibt es in der Hilfe ein Beispiel, das ich hier etwas erweitert habe. Die ersten beiden Parameter von camorbit sind Drehwinkel, der letzte ist die Rotationsachse. Bei getframe braucht man den Vektor hinten, um in jedem Schritt ein Bild der gleichen Größe (in Pixeln) für den Film auszuschneiden. movie und movie2avi haben auch noch Parameter, um die Geschwindigkeit des Films anzupassen etc.

Code:
surf(peaks)
axis vis3d
for i=1:36
    camorbit(10,0,'data',[0 0 1])
    drawnow
    M(i)=getframe(gcf,[5 5 550 410]);
end

movie(M);
movie2avi(M,'surf2.avi','compression','none');


Ich hoffe, das hilft dir weiter. Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
puerto
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.08.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2007, 17:46     Titel:
  Antworten mit Zitat      
Klasse! Das funktioniert! Besten Dank!!!

Ein kleines Problem habe ich mit dem Befehl
Code:
immer noch. Und zwar: die Drehgeschwindigkeit lässt sich anscheinend nicht einstellen. Da es um eine Präsentation geht und mein vorangiges Ziel die Details der Grafik anschaulich wie möglich darzustellen ist, spielt die Rotationsgeschwindigkeit nicht ganz letzte Rolle Sad.
Hast Du eventuell dafür eine Idee?

Grüsse,
Puerto
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 29.08.2007, 18:24     Titel:
  Antworten mit Zitat      
Ja, das geht über den Laufindex. In der Schleife werden 36 Bilder mit einer Rotation von je 10° erzeugt. Man kann also die 36 durch 72 und die 10 durch 5 ersetzen, um die halbe Geschwindigkeit (eigentlich: doppelt so viele Bilder für eine Rotation) zu haben. Ebenso kann man auch 360 mal um je 1 Grad rotieren usw. Die Abspielgeschwindigkeit kann man mit dem Parameter 'fps' (frames per second) in movie2avi einstellen. Aber damit es ruckelfrei läuft, sollte man in der Schleife ausreichend viele Bilder gemacht haben.

Klappt's? Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
puerto
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 29.08.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2007, 18:57     Titel:
  Antworten mit Zitat      
Es klapt alles bestens!
VIELEN DANK für Deine promte Antworten!!!

Grüsse,
Puerto
Private Nachricht senden Benutzer-Profile anzeigen
 
gigazwerg
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 27.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2009, 17:55     Titel:
  Antworten mit Zitat      
Das Thema beschäftigt mich auch gerade. Und ich sage schon einmal danke für den Code.

Ich habe nur

M(i)=getframe;

stehen. Sonst ist alles wie im Beispiel hier beschrieben.
Bis zum befehl movie(M) funktioniert noch alles super und ich sehe wie sich meine 3d Grafik dreht.

Allerdings frage ich mich, wo ich das erzeugte *.avi file finde?

Was genau bewirkt getframe(gcf,[5 5 550 410])? Wenn ich damit spiele sieht es so aus, als ob nur ein Teil des Bildes rotiert wird.

Nach mehreren Versuchen bekomme ich jetzt immer folgende Fehlermeldung

??? Error using ==> avi
Failed to open file.

Error in ==> avifile.avifile at 173
aviobj.FileHandle = avi('open',filename);

Error in ==> movie2avi at 63
avimov = avifile(filename,varargin{:});

Error in ==> calculate3 at 161
movie2avi(M,'linear.avi','compression','none');

oder folgende Fehlermeldung

??? Error using ==> avifile.addframe>ValidateFrame at 293
Frame must be 325 by 295.

Error in ==> avifile.addframe at 157
ValidateFrame(aviobj,width, height,dims);

Error in ==> movie2avi at 64
avimov = addframe(avimov,mov);

Error in ==> calculate3 at 161
movie2avi(M,'linear.avi','compression','none');

Kann mir bitte jemand helfen und das mal erklären?
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 25.05.2009, 16:38     Titel:
  Antworten mit Zitat      
Hallo gigazwerg,

erste Antwort: Bis zum Befehl
Code:

existiert noch kein avi-file. Das wird erst mit movie2avi erzeugt. Da dort der Fehler passiert, kannst Du die Datei nicht finden. Sie sollte im Erfolgsfall im Current Directory landen.

zweite Antwort:
Code:

bewirkt, dass aus der aktuellen figure (gcf) ein Kasten ausgeschnitten wird. Er beginnt 5 Pixel oberhalb des unteren Randes, 5 Pixel rechts des linken Randes und ist 550 Pixel breit und 410 Pixel hoch. Ich habe das damals so gewählt, weil die Grafik sonst im Bild herumgewandert ist. Wenn Dein movie(M) funktioniert und gut aussieht, brauchst Du das nicht.

Hm, leider hilft Dir das alles nicht weiter, weil Du ja eigentlich wissen möchtest, warum movie2avi nicht funktioniert. Das kann ich aber leider auch nicht sagen. Funktioniert denn das Beispiel mit surf(peaks)?

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
gigazwerg
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 27.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2009, 14:22     Titel:
  Antworten mit Zitat      
Hi Bijick,

danke für Deine Antwort. Ich glaube die Lösung des Problems gefunden zu haben.
Ich habe einfach mal movie(M) deaktiviert und siehe da es läuft alles ohne Probleme. Ich habe auch in anderen Foren gelesen, dass der Movie Befehl Probleme bereitet.
Von meiner Seite kann ich das nur bestätigen. Wer also mal Probleme mit der Movie Funktion hat, sollte den Film gleich mit movie2avi umwandeln.

Eins habe ich allerdings noch immer nicht ganz begriffen. Wenn ich ein Film kurz laufen lassen also for i = 1:35 läuft alles super. Für for i = 1:70 geht nix mehr. Ich vermute das liegt am Arbeitsspeicher. Kann mir jemand darin bestätigen bzw. mir eine andere Erklärung geben?

Danke

giga
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 - 2024 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.