2017-05-25 1 views
0

J'essaie d'animer une ligne sur un arrière-plan dynamique en même temps, le problème est que je ne peux pas mettre à jour les deux dans le même intrigue. Si j'anime le fond, les lignes n'apparaissent pas. Donc la question est pourquoi? J'essayais dans différentes positions sans succès.Matlab anime l'arrière-plan et la ligne dans la même figure

Si vous supprimez la partie du imagesc, il n'y a pas de problème et l'animation des lignes de flux

for k = 1:numel(t) 
    decay = rand; 
    res = decay * background; 
    imagesc(x,y,flip(res)); 
    hold on 
    clearpoints(h); 
    clearpoints(p); 

    addpoints(p,[l,(cosO(k)],[0,cosO(k)]); 
    addpoints(h,[r,(senO(k)],[0,senO(k)]); 

    drawnow 
    hold off 
end 

fixe! Créez un gestionnaire et modifier CData à l'intérieur de la boucle:

imh = imagesc(x,y,flip(res)); 
for ... 
    imh.CData = flip(res); 

end 
+1

utilisation 'tenir on' ** avant ** l'appel à' imagesc', ou omettent le 'tenir Désactivée dans à la fin, ou utilisez 'imh = imagesc (...)' pour 'i = 1' puis' imh.CData = flip (res) 'pour' i> 1'. – user2999345

+0

Merci, maintenez la stratégie marche/arrêt ne fonctionne pas, mais en créant le gestionnaire et en modifiant le CData qu'il fait! –

+0

@ user2999345 Veuillez convertir votre commentaire en une réponse ou l'OP peut le faire. – m7913d

Répondre

0

Les appels à imagesc dépassement de votre terrain. vous pouvez surmonter ce problème en ne changer la matrice d'image représentée par imagesc (comme 'CData' propriété):

for k = 1:numel(t) 
    decay = rand; 
    res = decay * background; 
    if k == 1 
     imh = imagesc(x,y,flip(res)); 
    else 
     imh.CData = flip(res); 
     % or: set(imh, 'CData', flip(res)); % in older MATLAB versions 
    ... 
end