2016-07-21 14 views
0

Ich benutze MATLAB, um den Lorenz-Attraktor zu zeichnen, und habe mich gefragt, wie ich die XYZ-Koordinaten in eine 3D-druckbare Datei exportieren kann! Ich habe Probleme, von den XYZ-Koordinaten zu einer Oberfläche zu gehen (sollte ich das auch tun?). Darüber hinaus scheint mir sogar der Lorenz Attraktor als "Oberfläche" nicht richtig zu sein, da mein Verständnis ist, dass es eher ein "Pfad" ist. Mein Code so weit:3D Drucken des Lorenz Attractor mit MATLAB

clear all; clc; clf; 

dt = .01; 
n = 100; %Number of Drawings 
t = 0:dt:n; %Time Scale 

%INITIAL CONDITIONS 
x = 1; 
y = 1; 
z = 1; 
xyz0 = [x y z]; 

%SOLVE ODE 
[t,xyz] = ode45(@rhs, t, xyz0); 

x = xyz(:,1); 
y = xyz(:,2); 
z = xyz(:,3); 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%%%%%%  PLOTTING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

%plot3(x,y,z); 

rotate3d on; 

end 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%%%%%%   RHS FOR ODE45  %%%%%%%%%%%%%%%%%%%%%%%% 
function xyzdot = rhs(t,xyz) 

    sigma = 10; 
    b  = 8/3; 
    r  = 100; 

    x = xyz(1); 
    y = xyz(2); 
    z = xyz(3); 

    dxdt = sigma*(y - x); 
    dydt = r*x - y - x*z; 
    dzdt = x*y - b*z; 

    xyzdot = [dxdt; dydt; dzdt]; 

end 

Ich habe versucht, diese früher:

[X,Y] = meshgrid(x,y); 
surf(X, Y, z); 

Aber nichts funktioniert. Der Fehler sagt z muss eine Matrix sein, und ich bin ein bisschen verloren. Jede Hilfe wird geschätzt! Danke,

Antwort

1

kann nicht arbeiten, weil Sie eine Kurve zeichnen. Netz möchte Matrizen als Eingabe. Um eine Kurve zu plotten, können Sie plot3 verwenden. Versuchen Sie folgendes:

figure; 
plot3(x, y, z); 
grid on 

1

3D-Druck erfordert die Verwendung von 3D-Dateiformate, wie stl (am häufigsten), stp, amf, OBJ, oder paramaterized Fräsbahnen (Gcode). Sie können die parametrische Form davon exportieren, um die Bewegung eines 3D-Druckers zu steuern, aber Sie werden tatsächlich nichts drucken. Wenn Sie eine stl exportieren möchten, müssen Sie eine große Anzahl von Facetten (Dreiecke im 3D-Raum mit normalen Vektoren, die durch einen rechtshändigen Kreuzprodukt berechnet) erstellen, und geben sie in folgendem Format:

solid keyminus.stl 
facet normal -0.676239558096412 0.628228242471799 0.384745806249222 
    outer loop 
    vertex 0 0 107.76627426733 
    vertex 1.5625 1.5625 107.961254120119 
    vertex 1.5625 0 110.512566214802 
    endloop 
endfacet 
facet normal -0.678155426589519 0.63117863312972 0.37645550928056 
    outer loop 
    vertex 0 0 107.76627426733 
    vertex 0 1.5625 105.146531455889 
    vertex 1.5625 1.5625 107.961254120119 
    endloop 
endfacet 

.... (39,000 more facets here) 

facet normal 0 -1 0 
    outer loop 
    vertex 198.4375 0 0 
    vertex 198.4375 0 110.512566214802 
    vertex 200 0 107.76627426733 
    endloop 
endfacet 
facet normal 0 -1 0 
    outer loop 
    vertex 198.4375 0 0 
    vertex 200 0 107.76627426733 
    vertex 200 0 0 
    endloop 
endfacet 
endsolid