如何在情节内的两个点之间显示一条线(如动画)?

43次浏览(过去30天)
RevengeOfTee
RevengeOfTee 20月28日
编辑: 亚当Danz 在2021年8月3日在22:51
假设我想在两点之间创建一条线,并显示从图中的第一个点到第二个点的每一步。我该怎么做呢?作为背景,我正在做一个机器人作业,要求我用一个bug算法来做这个。我不想要一个算法的解,因为这会让它失去乐趣。相反,我只是在寻找一种简单的方法来显示这条线连接两个点的每一步。我目前还不知道这将涉及什么样的代码,但我通过小道消息听说使用步长。
预先感谢您的任何帮助!

接受答案

亚当Danz
亚当Danz 20月28日
编辑:亚当Danz 在2021年8月3日在22:51
如果需要,插入您的数据以获得或多或少的数据点。这里有一个例子
xvalues = 1:16;
yvalues =(1:16)。^ 2;
newX = min(xvalues): 0.01: max(xvalues);
纽约= interp1(xvalues,yvalues,newx);
几种方法 使情节生动活泼它们都涉及到在循环中更新情节,使用 drawn .注意,这个命令会更新 全部 现有的图形,所以如果有很多其他的图形/图形界面/应用程序被打开,它们都会每次更新 drawn 调用,这将增加大量的处理时间。为了减少这种情况,在制作动画之前删除不需要的图形。
采用 drawnow limitrate 通过跳过一些图形更新来加快动画。
采用 暂停(n) 在每次迭代结束时插入短暂的停顿来减慢动画速度: 暂停(0.1)
方法1:使用动画技术
使用其中一个 动画方法 animatedline
%创建数据
x = linspace (0, 10);
y = sin(3 * x);
设置坐标轴
CLF()
Axh =轴();
h = animatedline (axh,“颜色”“b”);
ylim (axh [1])%在动画之前设置限制
xlim (axh 10 [1])%在动画之前设置限制
%动画
i = 1:numel(x)
addpoints(h,x(i),y(i));
drawn
结束
看到 动画条目属性 有关动画行的其他属性。
看到 这个答案 为了实现这个演示 yyaxis.
方法二:迭代更新线坐标
此方法的最有效的方法是使用所有NAN值生成线对象,然后在循环中更新XDATA,YDATA,(和ZDATA)。
%创建数据
x = linspace (0, 10);
y = sin(3 * x);
设置坐标轴
CLF()
Axh =轴();
H = plot(axh, nan(size(x)),nan(size(y))),'b-');情节中什么也不会出现
ylim (axh [1])%在动画之前设置限制
xlim (axh 10 [1])%在动画之前设置限制
%动画
i = 1:numel(x)
h.xdata(i)= x(i);
h.ydata(i)= y(i);
drawn
% pause(0.1) %以减慢它的速度
结束
另一个变型是将初始对象坐标设置为在某些情况下可能有用的单个(NaN,NaN)坐标,
%创建数据
x = linspace (0, 10);
y = sin(3 * x);
设置坐标轴
CLF()
Axh =轴();
H =图(AXH,NaN,NaN,'b-');情节中什么也不会出现
ylim (axh [1])%在动画之前设置限制
xlim (axh 10 [1])%在动画之前设置限制
%动画
i = 1:numel(x)
套(H,“XData”,x(1:i),'ydata'y(1:我))
drawn
% pause(0.1) %以减慢它的速度
结束
另一种方法是绘制独立的线段,其属性可以独立地操纵。
%创建数据
x = linspace(-2 * pi,2 * pi,300);
y = sin(x);
%中断分段
x = x (:);%力量Col vectors
y = y(:);%力量Col vectors
xseg = [x(1:end-1),x(2:端)];
yseg = [(1: end-1), y(2:结束)];
%设置动画
CLF()
持有%重要
xlim (8 [8])
ylim([ - 1 1])
segColors =喷气(大小(xseg, 1));选择一个颜色图
%动画线
i = 1:尺寸(xseg,1)
h =情节(xseg(我,:),yseg(我,:)“- - -”“线宽”,3,“颜色”segColors(我:));
drawn
结束
方法3:创建电影
这用途 GetFrame. 在循环中存储每个帧的图像和 电影 回到它。否则,它与上面的方法2相同。
%创建数据
x = linspace (0, 10);
y = sin(3 * x);
设置坐标轴
CLF()
Axh =轴();
H = plot(axh, nan(size(x)),nan(size(y))),'b-');情节中什么也不会出现
ylim (axh [1])%在动画之前设置限制
xlim (axh 10 [1])%在动画之前设置限制
%动画
n =元素个数(x);
F (n) =结构('cdata',[],“colormap”[]);
i = 1: n
h.xdata(i)= x(i);
h.ydata(i)= y(i);
drawn
F (i) = getframe;
结束
现在回放两遍。保存 F 再次播放电影而不重新创建数据和图形。
电影(F,2)
5个评论

登录评论。

更多的答案(0)

社区宝藏狩猎

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!

被某某人翻译