【问题标题】:Points moving along a curve within MATLAB在 MATLAB 中沿曲线移动的点
【发布时间】:2011-08-06 22:38:57
【问题描述】:

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

我正在尝试找到一种方法来编辑它,以便创建两个沿这条曲线移动的独立点,或者创建第二个图形来显示另一个点沿图形移动。 要点是这些点需要相互独立,以便可以将算法应用于它们。

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

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

【问题讨论】:

    标签: matlab graph point


    【解决方案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)]))   
    

    所以你的第二个点向下滑动,第一个点向上滑动。您可以在hLine2hTxt2 的定义中根据需要定义点的轨迹

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2022-10-14
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      相关资源
      最近更新 更多