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

Kräfte in 3D darstellen

 

Elmo11
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 03.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2016, 11:16     Titel: Kräfte in 3D darstellen
  Antworten mit Zitat      
Ich möchte im Grunde genau wie im beigefügten Bild dargestellt, ein Koordinatensystem mit 4 Kräften haben. Dabei werden die Kräfte aus einem Arduino ausgelesen. Das Auslesen und anzeigen der Komponenten klappt ohne Probleme. Jedoch möchte ich diese nun noch grafisch darstellen. Den folgenden Code habe ich auf einen Button gelegt der ein Fenster öffnen und diese Kräfte darstellen soll.

Code:
%Hier mein Code
fx= 10; fy=10; fz=50;
w = [0 0 0];
x = [fx 0 0]; %Kraft in x-Richtung
y = [0 fy 0]; %Kraft in y-Richtung
z = [0 0 fz]; %Kraft in z-Richtung
r = x+y+z; %Resultierende Kraft

figure('Name','Plot Forces','OuterPosition',[450 180 1020 720])
plot3([-0.5 0.5],[0 0],[0 0],'k',[0 0],[-0.5 0.5],[0 0],'k',[0 0],[0 0],[-0.5 0.5],'k','linewidth',1);
grid on
grid minor
hold on
p1 = arrow(x,w,'FaceColor','r','EdgeColor','r');
p2 = arrow(y,w,'FaceColor','g','EdgeColor','g');
p3 = arrow(z,w,'FaceColor','b','EdgeColor','b');
p4 = arrow(r,w,'FaceColor','m','EdgeColor','m');

plot3([-1 1],[-1 -1],[-1 -1])
plot3([1 1],[-1 -1],[-1 1])
plot3([1 -1],[-1 -1],[1 1])
plot3([-1 -1],[-1 -1],[-1 1])
plot3([-1 1],[1 1],[-1 -1])
plot3([1 1],[1 1],[-1 1])
plot3([1 -1],[1 1],[1 1])
plot3([-1 -1],[1 1],[-1 1])
plot3([1 1],[-1 1],[1 1])
plot3([1 1],[-1 1],[-1 -1])
plot3([-1 -1],[-1 1],[1 1])
plot3([-1 -1],[-1 1],[-1 -1])
axis square
hold off
legend([p1,p2,p3,p4],'Force X in [N]','Force Y in [N]','Force Z in [N]','Resultant Force in [N]','Location','northeast');
xlabel('x-axis [N]');
ylabel('y-axis [N]');
zlabel('z-axis [N]');
 


Ich habe beispielhaft die Kräfte erstmal festgelegt. Dies ersetze ich dann später durch die ausgelesenen.
In der Mitte sollte sich ein Würfel befinden auf den die Kräfte zeigen.

Zu meinen Problemen:
1) Ich wollte die gleich Achsenlängen haben, aber egal ob ich mit axis equal oder square oder anderen Befehlen arbeite, die Z-Achse ist immer verschieden lang.

2) Ist es möglich das Koordinatensytem mit einem Befehl genau so wie im beigefügten Bild darzustellen.

3) Warum werden die Pfeile der Vektoren mit dem Befehl Arrow nicht gleich dargestellt? Bei x ,y ,z sind sie viel zu klein und die Größe der Resultierenden passt perfekt obwohl ich keine Größeneinstellungen bei dem Befehl arrow vorgegeben habe.

4) Ich wollte eine Beschriftung direkt am Vektor einfügen. Finde aber keine Befehl dazu. Z.B. den Betrag des Vektors.

5) Gibt es einen einfachen Befehl um die Schrittweite der Achsenskalierung festzulegen. Für feste Achsen klappt das ja mit xTick aber bei variablen Längen bin ich mir nicht mehr sicher.

Ich hoffe Ihr könnt mir helfen. Bin ein Matlab Neuling und hänge seit Tagen schon an diesen Problemen und finde im Internet leider auch keine Lösung dazu.
Über Optimierungsvorschläge zu meinem Code würde ich mich auch sehr freuen.

Beispiel Grafik.png
 Beschreibung:
Koordinatensystem mit 4 Kräften

Download
 Dateiname:  Beispiel Grafik.png
 Dateigröße:  8.87 KB
 Heruntergeladen:  366 mal
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 06.05.2016, 20:03     Titel: Re: Kräfte in 3D darstellen
  Antworten mit Zitat      
Zitat:
1) Ich wollte die gleich Achsenlängen haben, aber egal ob ich mit axis equal oder square oder anderen Befehlen arbeite, die Z-Achse ist immer verschieden lang.

Wenn du das:
Code:
axis([xmin xmax ymin ymax zmin zmax])

nutzt und die maxima auf z-max setzt für alle?

Zitat:
2) Ist es möglich das Koordinatensytem mit einem Befehl genau so wie im beigefügten Bild darzustellen.

Für das drehen des Koordinatensystemes gibt es:
Code:



Zitat:
4) Ich wollte eine Beschriftung direkt am Vektor einfügen. Finde aber keine Befehl dazu. Z.B. den Betrag des Vektors.

Code:
text(x,y,'blabla')


Zitat:
5) Gibt es einen einfachen Befehl um die Schrittweite der Achsenskalierung festzulegen. Für feste Achsen klappt das ja mit xTick aber bei variablen Längen bin ich mir nicht mehr sicher.

Ausprobieren?
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Elmo11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 03.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2016, 22:19     Titel:
  Antworten mit Zitat      
1) aber dann ist mein Problem doch nicht gelöst. Was ist wenn y Achse länger ist als die z Achse dann sieht man diesen Vektor ja gar nicht mehr vollständig. Das Problem ist ja das die Vektoren je nach Kraft auf die Messdosen verschieden lang sein können oder ich habe deine Antwort falsch verstanden.

2) Dann sieht es ja nicht genau so aus wie auf dem Bild sondern wurde nur gedreht.

4) Text am Vektor geht also nicht? Sondern nur an einer Postion. Habe ich das richtig verstanden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Elmo11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 03.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2016, 23:11     Titel:
  Antworten mit Zitat      
Vielen Dank für die Hilfe. Habe es jetzt hinbekommen.
Falls es jemanden interessiert

zu 1) Habe ich einfach das betragsmäßige Maximum meines Vektors genommen
Code:
axis([-max(abs(r(:))) max(abs(r(:))) -max(abs(r(:))) max(abs(r(:))) -max(abs(r(:))) max(abs(r(:)))])  


zu 2) Anscheinend nicht möglich.

zu 3) bei der Arrow.m Datei muss man
Code:
arrow fixlimits;
setzen sonst verformen sich die Vektoren.

zu 4) danke an Mmmartina. Klappt sehr gut mit Text. Z.B.
Code:
text((fx/2),-2,-2,[num2str(fx,4),' N'],'Color','r');


zu 5) Skalierung passt nach dem Anpassen der Achsenlänge
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.