2016-08-29 5 views
0

Je cherche à créer un graphe circulaire simple dans MATLAB dans lequel le modèle montre le point se déplaçant le long du cercle avec le rayon et la vitesse angulaire définis par le utilisateur.Création d'un point se déplaçant le long d'un cercle dans MATLAB avec la vitesse et le rayon définis par l'utilisateur

Vitesse angulaire en radians/SEC

Je suis relativement nouveau au codage Matlab de sorte que toute aide serait très utile!

J'ai essayé ce code:

r=1; 
t = 0:.01:2*pi; 
x = r*cos(t); 
y = r*sin(t); 
comet(x,y); 

Mais quand je change la valeur 0,01 point ne se déplace pas plus vite, il saute un peu plus de la courbe, je suis également incertain si les incréments sont en radians .

Merci pour votre temps

+2

Déplacement plus rapide = sauter plus de la courbe lorsque vous ajustez simplement la taille du pas. – Suever

+0

oui, c'est le problème –

Répondre

1

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:

  1. 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é)
  2. 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.
+0

Salut, merci beaucoup pour votre aide, juste une chose, je ne peux pas sembler changer la vitesse, si je mets 1 ou 100 la différence est presque unoticiable –

+0

@RicardoSilvestre je ne voulais pas obtenir * aussi * avancé parce que vous avez dit que vous étiez un débutant. Oui vous avez raison, la raison en est le temps qu'il faut pour * retracer * l'ensemble de l'intrigue, matlab n'est pas assez rapide, donc cela "mange" dans le temps. Si vous mettez des vélocités plus lentes, vous verrez que ça devient plus lent. Il existe des moyens de rendre ceci plus rapide, en mettant à jour directement les données du tracé au lieu de les redessiner, mais c'est un peu plus complexe. Veux-tu encore que je te montre? –

+0

ok, j'ai mis à jour ma réponse –