version Edité: Voir l'historique des modifications pour la version précédente.
Radius = 10;
AngularVelocity = 5; % in deg/s
AngleStep = 0.1
Angles = AngleStep : AngleStep : 2*pi;
CircleX = [Radius]; % empty array
CircleY = [0]; % empty array
%Initial zero-angle plot whose data we'll keep updating in the for loop:
a = plot([CircleX,CircleX], [CircleY,CircleY], 'r:');
hold on;
b = plot(CircleX, CircleY, 'o', 'markeredgecolor', 'k', 'markerfacecolor','g');
axis([-Radius, +Radius, -Radius, +Radius]); % make sure the axis is fixed
axis equal; % make x and y pixels of equal size so it "looks" a circle!
hold off;
for t = Angles
CircleX(end+1) = Radius * cos (t); % append point at end of CircleX array
CircleY(end+1) = Radius * sin (t); % append point at end of Circley array
set(a,'xdata',CircleX,'ydata',CircleY); % update plot 'a' data
set(b,'xdata', CircleX(end), 'ydata', CircleY(end)); % update plot 'b' data
drawnow; % ensure intermediate frames are shown!
pause(AngleStep/AngularVelocity) % pause the right amount of time!
end
Cette modification a fait deux changements par rapport à la version précédente:
- Au lieu de redessiner, maintenant, nous mettons à jour les données d'un tracé existant. Ceci est généralement plus rapide car matlab ne doit pas redessiner les objets
axes
(c'est-à-dire les conteneurs qui contiennent le tracé)
- J'ai augmenté AngleStep de 0,01 à 0,1. Cela signifie qu'il y a 10 fois moins d'angles à dessiner, donc vous pouvez vous permettre de tirer 10 fois plus lentement, donc il devient moins probable que matlab sera incapable de dessiner à cause des frais généraux. Cela dit, cela se fait au prix d'un cercle moins parfait. Essayez avec AngleStep = 1 pour voir ce que je veux dire.
Déplacement plus rapide = sauter plus de la courbe lorsque vous ajustez simplement la taille du pas. – Suever
oui, c'est le problème –