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

Pole einer Kugel-Meshgrid kippen lassen

 

IVE-student
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2013, 12:14     Titel: Pole einer Kugel-Meshgrid kippen lassen
  Antworten mit Zitat      
Hallo alle zusammen,

habe ein kleines Problem...
Ich möchte eine dreidimensionale rollende Kugel simulieren. Später wird dann die Bewegung (3 translatorische Bewegungsrichtungen und 3 rotatorische Bewegungsrichtungen) in einem Matlab Solver berechnet (ode45 zum Beispiel). In der outputfcn (über odeset einstellbar) möchte ich dann die Visualisierung der Bewegung der Kugel umsetzen. Habe jetzt zunächst an einen Mesh- Befehl gedacht.

Im folgenden Code-Beispiel (Minimalbeispiel) lässt sich die Kugel um die vertikale Achse sichbar rotieren. (Die Pole stehen oben und unten)
Wenn ich aber die Rotation um eine vertikale Achse ausführen möchte, dann geht das nicht. (Pole bleiben stehen und sollten eigentlich umkippen...)

Code:

clear
clc

phi = 0:pi/10:2*pi;
theta = phi;
r = 1;

for i = pi:0.01*pi:3*pi
    alpha = i;

    [t,p] = meshgrid(theta,phi-alpha);  
    % alpha ist der Rotationswinkel
   
    %--> [t,p] = meshgrid(theta-alpha,phi); funktioniert nicht, weil Pole fixiert bleiben  
   
    % Koordinatentransformation in Kugelkoordinaten
    plot3(r.*cos(t(1,1)).*cos(p(1,1)),r.*cos(t(1,1)).*sin(p(1,1)),r.*sin(t(1,1)),...
        'Marker','o','Markersize',16,'MarkerFaceColor','black');
    % Plotten eines schwarzen Kontrollpunktes
    hold on
    mesh(r.*cos(t).*cos(p),r.*cos(t).*sin(p),r.*sin(t),'FaceColor','none')
    % plotten des Kugelnetzes
    hold off
    pause(0.01)
    % Pause für die Visualisierung
end
 


Hat jemand eine Idee? Ist das Problem durch die Matlab-Funktion Mesh bedingt, oder ist es ein mathematischer Fehler?

beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen


IVE-student
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2013, 15:48     Titel:
  Antworten mit Zitat      
Habs gelöst.
Es war ein mathematische Problem. Es musste eine richtige Koordinaten-Transformation her...

Code:

clear
clc
cla

phi = linspace(0,2*pi,51);
n = length(phi);
theta = phi;
r = 1;
[t,p] = meshgrid(theta,phi);  
   
x = r.*cos(t).*cos(p);
y = r.*cos(t).*sin(p);
z = r.*sin(t);

hm = mesh(x,y,z,'Edgecolor','black','FaceColor','white');

P = zeros(n,n,3);

for p = 1:1:n
    for q = 1:1:n
        P(p,q,:) = [x(p,q),y(p,q),z(p,q)];        
    end
end

R1 = @(alpha)([1 0 0; 0 cos(alpha) -sin(alpha); 0 sin(alpha) cos(alpha)]);
R2 = @(beta)([cos(beta) 0 sin(beta); 0 1 0;-sin(beta) 0 cos(beta)]);
R3 = @(gamma)([cos(gamma) -sin(gamma) 0;sin(gamma) cos(gamma) 0; 0 0 1]);

for i = pi:0.003*pi:2*pi
    alpha = i*1;
    beta  = i*1;
    gamma = i*1;
   
    TMx = R1((4*alpha));
    TMy = R2(4*beta);
    TMz = R3(4*gamma);
   
    for p = 1:1:n
        for q = 1:1:n
            D = [x(p,q);y(p,q);z(p,q)];
            D = TMx*D; D = TMy*D; D = TMz*D;
            X(p,q) = D(1);
            Y(p,q) = D(2);
            Z(p,q) = D(3);
        end
    end
       
    set(hm,'XData',X,'YData',Y,'ZData',Z);
   
    pause(0.01)
end
 

viele Grüße
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.