Matlab 小练习:动态画出点的移动过程

时间:2022-02-03 18:33:28

今天,看到网上的一个动态绘制的图形,就想用Matlab也画一个动态图。查看Matlab帮助文档,发现动态图的绘制主要有3种思路。私下揣测,写了一段简单的代码,画出数据点在3X3方格中的移动过程(也可以看做是超简单的寻路过程)。因为只是做演示用,所以获取数据点序列的代码非常简单,没有用到任何复杂算法。

Matlab 小练习:动态画出点的移动过程

代码主要功能是动态绘出星型点从1号方格移动到9个方格的过程,其中只有起始点和终点是确定的1和9,中间路径的点均是从邻接表中随机采样得到的。


%% Matlab Ex
clc,clear,close all;
% Adjacency table
AdList = [1,2,4,nan,nan;...
    2,1,3,5,nan;...
    3,2,6,nan,nan;...
    4,1,5,7,nan;...
    5,2,4,6,8;...
    6,3,5,9,nan;...
    7,4,8,nan,nan;...
    8,5,7,9,nan;...
    9,6,8,nan,nan];

% Mapping table 
Mt = [1 1 1;...
    2 2 1;...
    3 3 1;...
    4 1 2;...
    5 2 2;...
    6 3 2;...
    7 1 3;...
    8 2 3;...
    9 3 3];

sta = 1;
des = 9;

temp = 1;

traj = zeros(1,100);
index = 1;
traj(index) = sta;

while temp ~= 9;
    temp = Search(temp, AdList);
    index = index + 1;
    traj(index) = temp;
    if index > 100
        break;
    end
end

loca = find(traj > 0);
traj = traj(loca);

[road,len] = Map(traj, Mt);

figure;
axis equal;

for i=1:len;
    plot(road(i,1), road(i,2), 'r*');
    grid on;
    xlim([0.5 3.5]);
    ylim([0.5 3.5]);
    set(gca, 'XTickMode', 'manual', 'XTick', [0.5 1.5 2.5 3.5]);
    set(gca, 'YTickMode', 'manual', 'YTick', [0.5 1.5 2.5 3.5]);
    title(['The '  num2str(i) '/' num2str(len) ' step(s)']);
    pause(0.2);
    Fs(i) = getframe;
end


movie(Fs, 1, 2);


Search函数主要是从邻接表中找出下一个点的位置。这里只是随机找点,没有任何权重、成本方面的考虑。


function [des] = Search(sta, list)
% search for the next point.
%   step by step
[m, n] = size(list);

flag = false;
for i = 1:m;
    if sta == list(i,1)
        flag = true;
        break;
    end
end
if flag == false
    error('An error occurs in Search function.');
end

v = list(i,:);
des = v(randint(1,1,[2,n]));

while isnan(des)
    r = randint(1,1,[2,n]);
    des = v(r);
end
end


Map函数主要是将编号值通过映射表 mt 映射成坐标值:


function [road, len] = Map(traj, mt)
% mapping.
% 

len = length(traj);
road = zeros(len, 2);
for i = 1:len;
    k = mt(:,1) == traj(i);
    road(i,:) = mt(k,2:3);
end
end

效果图如下:

Matlab 小练习:动态画出点的移动过程Matlab 小练习:动态画出点的移动过程