2013-05-15 34 views
5

Tôi đang cố gắng để animate xoắn ốc này sử dụng matlab/quãng tám Tôi muốn nó theo đường xoắn ốc lên hoặc xuốngcốt truyện sinh động/quỹ đạo trong matlab/quãng tám

t = 0:0.1:10*pi; 
r = linspace (0, 1, numel (t)); 
z = linspace (0, 1, numel (t)); 
plot3 (r.*sin(t), r.*cos(t), z); 

spiral

tôi đã cố gắng sử dụng một vòng lặp for để animate nó nhưng điều đó chỉ mang lại cho tôi một hình dạng hình nón xem mã và hình ảnh dưới đây

clear all, clc,clf,tic 
t = 0:0.1:10*pi; 
r = linspace (0, 1, numel (t)); 
z = linspace (0, 1, numel (t)); 

for ii=1:length(r) 
    ii 
    plot3 (r.*sin(t(ii)), r.*cos(t(ii)), z); 
    hold on 
    %pause (.00001) 
end 

ảnh enter image description here

+1

Kiểm tra câu trả lời này: http://stackoverflow.com/questions/16426378/how-to-animate-this-3d-plot-in-matlab/16426623#16426623 –

Trả lời

1

Sau đây dường như làm việc trong Octave 3.6.2

t = 0:0.1:10*pi; 
r = linspace (0, 1, numel (t)); 
z = linspace (0, 1, numel (t)); 

figure 
axis([-1 1 -1 1 0 1]) 
hold on 

for ii=1:length(r) 
    plot3 (r(ii)*sin(t(ii)), r(ii)*cos(t(ii)), z(ii),'*'); 
    pause (.001) 
end 
+1

Điều này là tốt đẹp, mặc dù nó không cung cấp một quỹ đạo, chỉ có một chuỗi các điểm. Xem http://stackoverflow.com/a/17773313/181638 để biết giải pháp làm hoạt hình quỹ đạo. –

1

Chắc chắn không phải là đẹp nhất, nhưng đây là những thay đổi đầu tiên bạn cần phải thực hiện cho mã của bạn cho nó để làm một cái gì đó gần với những gì bạn muốn.

t = 0:0.1:10*pi; 
z = linspace (1, 0, numel (t)); 
for ii=1:length(t) 
    plot3 (z(ii)*sin(t(ii)),z(ii)*cos(t(ii)), z(ii)); 
    hold on 
    pause (.00001) 
end 
+0

Davin Điều này chỉ cho tôi lỗi "dòng 0 : * Tất cả * cạnh không xác định hoặc nằm ngoài phạm vi, do đó không có âm mưu. " –

+0

@RickT, không bao giờ được sử dụng octave trước đây, tôi đang thực hiện nó trên Matlab, có lẽ đó là một vấn đề tương thích/phiên bản sau đó. Bạn có thể thử thêm dòng 'clear ...', hoặc thay thế 'plot3' bằng' scatter3', có thể điều đó sẽ giúp ích. Nếu không, tôi mới ra khỏi ý tưởng. – davin

2

Bạn cũng có thể sử dụng comet3() gói, trong đó sinh động quỹ đạo thông qua cốt truyện:

delay = 0.001 % seconds 
figure 
comet3(r.*sin(t), r.*cos(t), z, delay); 

này làm sinh động một quỹ đạo liên tục mà tôi thích hơn một chuỗi rời rạc của * 's.

Nhược điểm duy nhất là phiên bản cometcomet3 được vận chuyển với Octave 3.6.4 chậm, bất kể độ trễ bạn sử dụng. Nhưng điều này có thể được khắc phục bằng cách sử dụng các trick lịch sự sau đây của andyras in this SO question:

% plot the first point to get started 
h = plot3(x(1),y(1),z(1),"b"); 
axis([min(x), max(x), min(y), max(y), min(z), max(z)]); 

% refresh the plot in a loop through the rest of the data 
for k = 1:length(z); 
    set(h, 'XData', x(1:k)); 
    set(h, 'YData', y(1:k)); 
    set(h, 'ZData', z(1:k)); 
    pause (0.001); % delay in seconds 
     % alternatively could provide a velocity function 
     % pause(sqrt(vx(k)^2+vy(k)^2+vz(k)^2)); 
endfor 

nhỏ lưu ý: một khi bạn đã sửa đổi chức năng, bạn sẽ cần phải buộc Octave để tải lại nó as it won't do this by default. Bạn có thể khởi động lại hoặc sử dụng tốt hơn clear cometclear comet3. Sau đó, lần sau, các chức năng này được gọi, định nghĩa của chúng sẽ được làm mới.

Các vấn đề liên quan