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

3D, Vibrationsdarstellung

 

Evilscytheman
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.11.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2007, 13:11     Titel: 3D, Vibrationsdarstellung
  Antworten mit Zitat      
Hi,

ich habe x,y,z Koordinaten einer Vibrationsmessung. Diese soll ich nun in Matlab durch einen Punkt darstellen.
Der Punkt spiegelt sozusagen die Vibrationen an meinem Messpunkt wieder.

Den Punkt stelle ich bisher so dar (x,y,z wurden aus einer Datei eingelesen):

Code:
figure(1)
clf

axis([-xmax xmax -ymax ymax -zmax zmax]);
hold on

punkte = plot3(0,0,0,'-bo',...
                    'MarkerEdgeColor','k',...
                    'MarkerFaceColor','g',...
                    'MarkerSize',10);

set(punkte,'EraseMode','normal');

for count=1:numframes
    xt=x(count);
    yt=y(count);
    zt=z(count);
    set(punkte,'xdata',xt,'ydata',yt,'zdata',zt);
    drawnow;
    pause(0.025)
end;


Das Problem ist, dass der Bildschirm natürlich auch nur 2 dimensional ist. Also möchte ich, dass der Punkt größer wird wenn er "näher" an den Betrachter kommt und "kleiner" wird wenn er weiter weg geht.

Die Position des Betrachters bekomme ich ja über den Azimuth und den Elevator raus

Code:


Da ich auch die 3 Koordinaten des Punktes habe, kann ich den Abstand zwischen Betrachter und Punkt ausrechnen. Nun muss ich nur noch die Größe des Punktes in Abhängigkeit des Abstandes verändern. Und da habe ich keine Ahnung wie.

Könnt ihr mir bitte helfen?
Private Nachricht senden Benutzer-Profile anzeigen


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 07.11.2007, 13:32     Titel:
  Antworten mit Zitat      
Wie wärse wenn Du nicht mit Punkten, sondern mit einem 3D-Kugel arbeitest... Dessen Größe wird dann von MATLAB berechnet, sobald Du dem Objekt näherst oder entfernst.

eine 3D-Kugel kann mit SPHERE erzeugt werden.

zB.
===
[X,Y,Z] = SPHERE(20);
surf(X,Y,Z);
===




MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Evilscytheman
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.11.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2007, 14:42     Titel:
  Antworten mit Zitat      
Hi danke für deine schnelle Antwort!

Jetzt hab ich da aber ein paar Probleme:

1. es ist extrem langsam, es dauert schon 20 Sekunden bis er das "Figure 1" Fenster öffnet bzw. Matlab hängt sich auf. Nach ner halben Ewigkeit kommt wird dann das "Figure 1" Fenster sichtbar und es wurden schon alle Kugeln gesetzt. Vll hab ich auch was falsch gemacht keine Ahnung. Komisch ist auch, dass wenn ich das Schritt für Schritt im Debug durchgehe alles passt.

2. Wie kann ich die alte Kugel löschen wenn die neue angezeigt wird?

So sieht die M-File bei mir aus:

Code:
figure(1)
clf

x=data(1:9376,4);
y=data(1:9376,5);
z=data(1:9376,6);

axis([-xmax xmax -ymax ymax -zmax zmax]);
hold on

numframes=9375;

for count=1:numframes
    x_mess=x(count);
    y_mess=y(count);
    z_mess=z(count);
    [x_kugel,y_kugel,z_kugel]=SPHERE(20);
    x_plaziert=x_kugel+x_mess;
    y_plaziert=y_kugel+y_mess;
    z_plaziert=z_kugel+z_mess;
    surf(x_plaziert,y_plaziert,z_plaziert);
    %pause(0.025);
end;


Bitte um nochmalige Hilfe.

Achja es kommt auf en Fehler, in dem steht dass der Speicher voll sei. Und ich soll doch Variable löschen. Keine Ahnung
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 07.11.2007, 15:29     Titel:
  Antworten mit Zitat      
ok bei knapp 10000 "Punkte" dazu noch in einer FOR-Schleife kann es schon etwas länger dauern... hmm...

Der Code bissl optimiert:

wozu ist der PAUSE-Befehl?
SPHERE aus der Schleife herausziehen...
Code:
figure
hold on
numframes=1000;

[x_kugel,y_kugel,z_kugel]=SPHERE(10); % mit 10 sind die Kugeln zwar kantiger, brauchen dafür aber weniger Platz im Grafikspeicher

for count=1:numframes
   x_mess=rand(1)*100;
   y_mess=rand(1)*100;
   z_mess=rand(1)*100;
   x_plaziert=x_kugel+x_mess;
   y_plaziert=y_kugel+y_mess;
   z_plaziert=z_kugel+z_mess;
   surf(x_plaziert,y_plaziert,z_plaziert);
end;
drawnow
axis image
view(3)
 





MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Evilscytheman
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.11.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2007, 09:28     Titel:
  Antworten mit Zitat      
Hallo,

wenn es nur um das Löschen geht, kannst Du so vorgehen:

Code:
s = surf(x_plaziert,y_plaziert,z_plaziert);
    pause(0.25);
    delete(s);


Damit wird jede Kugel nach 0.25 Sekunden gelöscht. Danach kommt dann die nächste.

Herzliche Grüße
Bijick

Edit: Hm, dzwischenquetschen wollte ich mich eigentlich nicht, wie ist denn das passiert? Und dieser Beitrag ist tatsächlich von mir! LG Bijick
Private Nachricht senden Benutzer-Profile anzeigen
 
Mini
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 19.10.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2007, 11:00     Titel:
  Antworten mit Zitat      
Hallo Evilscytheman,

ich hatte mal eine Ähnliche Aufgabe und musste die Bewegung eines Sensor darstellen mit 12000 Messpunkten, bei denen ich jedoch nur jeden 100. plotten musste.
Ich bin die Sache etwas anders angegangen und zwar mit Hilfe eines Patches und dem Befehl
Code:
.
Den Patch habe ich in Abhängigkeit eine Punktes (Mittelpkt) erstellt und anschließend in einer Schleife den Mittelpunkt entsprechend der Messpunkte (x,y,z) geändert.
Mit
Code:
set(patch_objekt,'Visible','off')
kannst du dann nach getframe z.B. den aktuellen Patch(deine Kugel auf der Position deines Messwertes) unsichtbar machen ehe du sie überschreibst. Alternativ kannst du den Patch auch löschen.
Vllt. kannst du davon was versuchen.

Gruß Mini
Private Nachricht senden Benutzer-Profile anzeigen
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 08.11.2007, 19:51     Titel:
  Antworten mit Zitat      
Habt Ihr schonm mal überlegt, die Daten als AVI zu exportieren? Dann lässt man die Kiste einmal rödeln und kann es danach immer wieder anschauen. AVI-Herstellung is in der Matlab Hilfe recht gut beschrieben. Wenn es nicht tut (manchmal gibt es Renderingprobleme wenn das Figure nicht Norm-grösse hat), gibt es noch die lowcost Variante:

Bilder der Reihe nach erzeugen und mit saveas als bild_00001.jpg abspeichern (führende Nullen nicht vergessen!) und dann mittels freeware converter von jpg nach avi umwandeln.
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
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.