2017-10-18 3 views
-1

J'ai une limite que je souhaite disperser en utilisant une ligne animée. Comment puis-je contrôler/ralentir la vitesse de cette opération?Comment ralentir le temps de rendu de la ligne animée - Matlab

Script:

clc; 
clear;  
I = imread('http://dreamicus.com/data/key/key-01.jpg'); 
I = rgb2gray(I); 
I=imcomplement(I); 
level = graythresh(I); 
BW = im2bw(I,level);  
BW_filled = imfill(BW,'holes');  
boundaries = bwboundaries(BW_filled); 
figure,imshow(I);  
b = boundaries{1}; 
plot(b(:,2),b(:,1),'b','LineWidth',2); 

an = animatedline; 
x=b(:,2); 
y=b(:,1); 


for k = 1:numel(x) 
    disp(k) 
    addpoints(an, x(k), y(k)) 
    drawnow 
    % Wait for 0.1 seconds 
    pause(0.1) 
end 
+2

Avez-vous vérifié la fonction build-in: [pause] (https://de.mathworks.com/help/matlab/ref/pause.html) – Irreducible

+1

double possible de [animation diagramme de dispersion 3D Matlab] (https://stackoverflow.com/questions/14927621/animated-3d-scatter-plot-in-matlab) – Wolfie

Répondre

5

Vous pouvez utiliser un objet timer pour indiquer la vitesse à laquelle de nouveaux points sont ajoutés (en utilisant addpoints)

t = timer('ExecutionMode', 'fixedRate', ... 
      'Period', 0.1, ... 
      'TimerFcn', @(s,e)addSomePoints()); 

k = 1; 

start(t); 

function addSomePoints() 
    addpoints(an, x(k), y(k)) 

    % Stop the timer when we're done. 
    k = k + 1; 
    if k > numel(x) 
     stop(t); 
    end 

    drawnow 
end 

En option, vous pouvez utiliser pause attendre un un certain temps après avoir ajouté chaque point. Cette option, cependant, ne prend pas en compte combien de temps addpoints prend pour s'exécuter.

for k = 1:numel(x) 
    addpoints(an, x(k), y(k)) 

    % Wait for 0.1 seconds 
    pause(0.1) 
end 
+0

a mis à jour le script mais il rend toujours très vite, pourquoi? – hsi

+0

Vous devez changer la période pour qu'elle soit plus grande afin qu'elle soit plus lente – Suever