#matlab #graph #point
#matlab #График #точка
Вопрос:
Мне удалось отредактировать фрагмент кода, который был предоставлен мне для того, чтобы показать точку, движущуюся вдоль кривой.
Я пытаюсь найти способ отредактировать это, чтобы создать две независимые точки, движущиеся вдоль этой кривой, или создать второй рисунок, который показывает другую точку, движущуюся вдоль графика. Основной момент заключается в том, что точки должны быть независимы друг от друга, чтобы к ним можно было применить алгоритм.
В настоящее время у меня есть следующий код, который выдает единственную точку, движущуюся вдоль кривой:
%# control animation speed
DELAY = 0.01;
numPoints = 600;
%# create data
x = linspace(0,1,numPoints);
f = 5;
C = 1-exp(-f);
y = C*(1-(exp(-f*x)));
%# plot graph
figure('DoubleBuffer','on') %# no flickering
plot(x,y, 'LineWidth',2), grid on
xlabel('x'), ylabel('y'), title('')
%# create moving point coords text
hLine = line('XData',x(1), 'YData',y(1), 'Color','r', ...
'Marker','o', 'MarkerSize',6, 'LineWidth',2);
hTxt = text(x(1), y(1), sprintf('(%.3f,%.3f)',x(1),y(1)), ...
'Color',[0.2 0.2 0.2], 'FontSize',8, ...
'HorizontalAlignment','left', 'VerticalAlignment','top');
%# infinite loop
i = 1; %# index
while true
%# update point amp; text
set(hLine, 'XData',x(i), 'YData',y(i))
set(hTxt, 'Position',[x(i) y(i)], ...
'String',sprintf('(%.3f,%.3f)',[x(i) y(i)]))
drawnow %# force refresh
%#pause(DELAY) %# slow down animation
i = rem(i 1,numPoints) 1; %# circular increment
if ~ishandle(hLine), break; end %# in case you close the figure
end
Ответ №1:
Вот как вы можете добавить еще одну точку, которая начинает скользить с конца независимо от первой точки.
В вашем коде перед строкой %#Infinite loop
добавьте следующее:
hLine2 = line('XData',x(end), 'YData',y(end), 'Color','g', ...
'Marker','o', 'MarkerSize',6, 'LineWidth',2);
hTxt2 = text(x(end), y(end), sprintf('(%.3f,%.3f)',x(1),y(1)), ...
'Color',[0.2 0.2 0.2], 'FontSize',8, ...
'HorizontalAlignment','left', 'VerticalAlignment','top');
и внутри цикла, перед drawnow
командой, добавьте следующее:
set(hLine2, 'XData',x(end-i), 'YData',y(end-i))
set(hTxt2, 'Position',[x(end-i) y(end-i)], ...
'String',sprintf('(%.3f,%.3f)',[x(end-i) y(end-i)]))
Итак, ваша вторая точка скользит вниз, а первая — вверх. Вы можете определить траекторию для точки по своему усмотрению в определении hLine2
и hTxt2