我设法编辑了一段代码,以显示沿曲线移动的点。

我试图找到一种编辑此方法的方法,以创建沿该曲线移动的两个独立点,或创建第二个图形,以显示沿曲线移动的另一个点。
要点是,这些点必须彼此独立,以便可以对它们应用一种算法。

我目前有以下代码,该代码给出了沿曲线移动的单个点:

%# 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 & 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

最佳答案

您可以通过以下方法添加另一个从终点开始滑动的,独立于第一个点的点。

在您的代码中,在%#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)]))

因此,您的第二点向下滑动,而第一点向上滑动。您可以根据需要在hLine2hTxt2的定义中定义该点的轨迹

关于matlab - 点在MATLAB中沿曲线移动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5687437/

10-11 00:44