在MATLAB中沿着曲线移动的点 [英] Points moving along a curve within MATLAB

查看:979
本文介绍了在MATLAB中沿着曲线移动的点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have managed to edit a piece of code that was given to me in order to show a point moving along a curve.

我试图找到一种编辑方式,以便创建两个独立的点,沿着这条曲线移动,或者创建另一个图形,显示沿图形移动的另一个点。
主要观点是这些点必须相互独立,以便可以将算法应用于它们。

I am trying to find a way to edit this in order to create two independent points moving along this curve or to create a second figure that shows another point moving along a graph. The main point is that the points need to be independent of one another so that an algorithm can be applied to them.

我现在有下面的代码给出了沿着曲线移动的单个点:$ b​​
$ b

I currently have the following code which gives a single point moving along the curve:

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


推荐答案

在你的代码中,在行之前,你可以添加另一个点,从头开始滑动, %#无限循环,添加以下内容:

In your code, before the line %#Infinite loop, add the following:

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 命令,添加以下内容:

and inside the loop, before the drawnow command, add the following:

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

这篇关于在MATLAB中沿着曲线移动的点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆