2016-08-29 11 views
0

Я ищу для создания простого кругового графика в MATLAB, в котором модель показывает точку, перемещающуюся по кругу с радиусом и угловой скоростью, определяемой пользователь.Создание точки, движущейся по кругу в MATLAB со скоростью и радиусом, определяемым пользователем

Угловая скорость в радианах/SEC

Я относительно новым в MATLAB кодирования, так что любая помощь будет очень полезно!

Я попробовал этот код:

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

Но когда я изменить значение 0,01 точка не двигается быстрее, он просто пропускает больше кривой, также я не уверен, если приросты в радианах ,

Спасибо за ваше время

+2

Перемещение быстрее = пропускание большей части кривой при простом изменении размера шага. – Suever

+0

Да, вот в чем проблема –

ответ

1

отредактированной версии: Смотрите историю изменений для предыдущей версии.

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 

Это изменение сделал два изменения по сравнению с предыдущей версией:

  1. Вместо перерисовки, теперь мы обновляем данные существующего участка. Это, как правило, быстрее, так как Matlab не нужно перерисовывать объекты axes (т. Е. Контейнеры, которые удерживают график)
  2. Я увеличил AngleStep от 0,01 до 0,1. Это означает, что в 10 раз меньше углов для рисования, поэтому вы можете позволить себе рисовать в 10 раз медленнее, поэтому становится менее вероятным, что матлаб не сможет рисовать из-за накладных расходов. Сказав это, это ценой менее совершенного круга. Попробуйте с AngleStep = 1, чтобы понять, что я имею в виду.
+0

Привет, большое вам спасибо за вашу помощь, только одна вещь, я не могу изменить скорость, если я ставлю 1 или 100, разница почти неприемлема. –

+0

@RicardoSilvestre Я не хотел получать * слишком * продвинутый, потому что ты сказал, что был новичком. Да, вы правы, причина в том, что это время, необходимое для * перерисовывания * всего сюжета, Matlab просто недостаточно быстро, поэтому это «ест» время. Если вы установите более медленные скорости, вы увидите, что это действительно замедляется. Есть * способы сделать это быстрее, обновив данные графика напрямую, а не перерисовывая, но это немного сложнее. Вы все еще хотите, чтобы я показал вам? –

+0

ОК, я обновил свой ответ –