尽管在整个过程中使用相

时间:2016-09-27 18:27:08

标签: matlab animation matlab-figure

    figure;
    poly = fill(sq(:,1), sq(:,2), 'b');
    %% create cell "p" consisting of 5600 arrays of same size as sq
    for i=1:5600
        hold on
        set(poly, 'X', p{i}(:,1),...
            'Y', p{i}(:,2));
        hold off
        drawnow;
    end
    %% again create cell "q" consisting of 8700 arrays of same size as sq
    for i=1:8700
        hold on
        set(poly, 'X', q{i}(:,1),...
            'Y', q{i}(:,2));
        hold off
        drawnow;
    end

我在第一行创建一个蓝色填充的多边形,然后在整个图形上移动它。当我运行上面的代码时,第一部分将p控制的多边形从初始点x0移动到x1。然后我在代码的第二部分中创建另一个单元格q并使用它将蓝色填充的多边形再次从x1移动到x2。但是这次在x1处创建了多边形的副本,该副本移动使得前一个多边形仍然在x1,而这个新多边形移动到x2。为什么会这样?

1 个答案:

答案 0 :(得分:0)

我尝试使用一些不同的代码(更高效)编写您描述的内容,并编写您未添加的部分。它正在工作,所以如果这是您所寻找的,您可以采用此代码或与您的代码进行比较并查找问题。

我的代码:

% define some parameters and auxilary function:
sq_size = 3;
makeSq = @(xy) [xy(1) xy(2)
    xy(1)+sq_size xy(2)
    xy(1)+sq_size xy(2)+sq_size
    xy(1) xy(2)+sq_size];

% create the first object:
sq = makeSq([1 1]);
poly = fill(sq(:,1), sq(:,2), 'b');

% setting the limmits for a constant view:
xlim([0 50+sq_size])
ylim([0 50+sq_size])

% first loop:
p = randi(50,10,2); % no need for cell here...
for k = 1:size(p,1)
    temp_sq = makeSq(p(k,:));
    set(poly, 'X', temp_sq(:,1),'Y',temp_sq(:,2));
    drawnow;
    pause(0.1)
end

% second loop:
q = randi(50,20,2); % no need for cell here...
set(poly,'FaceColor','g') % change to green to see we are in the second loop
for k = 1:size(q,1)
    temp_sq = makeSq(q(k,:));
    set(poly,'X',temp_sq(:,1),'Y',temp_sq(:,2));
    drawnow;
    pause(0.1)
end

pause只是让你看到动画,它并不是真的需要。