Manahil
Manahil

Reputation: 265

Simulation on MATLAB

enter image description here

I have to make a simulation of ants moving between their home (black box) and food (yellow box). These triple colored boxes are ants. The code that I wrote to draw the figure shown is following :

 % background
 background()   

 % making ants 
 handle = zeros(10,3) 
 handle = makingAnts(10) ;

 % moving ants 
 movingAnts(hand)

Function background :

 function background()

figure
hold on 
axis equal
axis([0 100 0 100])
pos = rand(1,2).*75
rectangle('position',[0 0 10 10],'facecolor','k')
rectangle('position',[pos 25 25],'facecolor','y')
 end

function making ants :

  function [h] = makingAnts(n)
  h = zeros(10,3)
  dia = [2 2]
   for i = 1:n
  pos = rand(1,2).* 95 ; 
  h(i,1) = rectangle('position',[pos dia],'facecolor',[0.2 0.6 1])
  g1 = get(h(i,1),'position')
  h(i,2) = rectangle('position',[(g1(1)+2) (g1(2)+2) 2 2],'facecolor',[0.4 1 0.6])   
  h(i,3) = rectangle('position',[(g1(1)+4) (g1(2)+4) 2 2],'facecolor',[1 0.8 1])
  end
   end

Now I have to move the ants. Though I have written the code but it is not working. I need help in making the ants move.

The code that I wrote :

 function  movingAnts(h)
 % moving 1 ant 
 pos = get(h(1),'position') 
 m = pos(1)
 n = pos(2) 
  for i = 1:50 
 set(h(1),'position',[(m+0.2) (n+0.2) 2 2])
 pause(0.05) 
 end
   end

Upvotes: 5

Views: 217

Answers (3)

Rash
Rash

Reputation: 4336

figure
axis([0 100 0 100])
rectangle('position',[0 0 5 5],'facecolor','k')
rectangle('position',[95 95 100 100],'facecolor','y')
n = 5;
x = zeros(1,n);
y = zeros(1,n);
c = ones(1,n);
while 1
  for i = 1 : n
      h1(i) = rectangle('position',[x(i) y(i) 2 2],'facecolor',[0.2 0.6 1]);
      g1 = get(h1(i),'position');
      h2(i) = rectangle('position',[(g1(1)+2) (g1(2)+2) 2 2],'facecolor',[0.4 1 0.6]);
      h3(i) = rectangle('position',[(g1(1)+4) (g1(2)+4) 2 2],'facecolor',[1 0.8 1]);
      x(i) = x(i) + c(i) * randi(4,1);
      y(i) = y(i) + c(i) * randi(4,1);
      if x(i) > 100 || y(i) > 100
          c(i) = -1 * c(i);
          x(i) = 100; y(i) = 100;
      end
      if y(i) < 0 || x(i) < 0
          c(i) = -1 * c(i);
          x(i) = 0; y(i) = 0;
      end
  end
  pause(.1)
  delete(h1,h2,h3);
end

enter image description here

Upvotes: 4

rozsasarpi
rozsasarpi

Reputation: 1641

As @franz1 pointed out the problem is that m and n variables are outside the loop and therefore not updating. To extend on his/her answer, here is a possible movingAnts.m function:

function  movingAnts(h)
    h = reshape(h,numel(h),[]);
    for i = 1:50
        pos = get(h,'position');
        % move all ants
        pos = cellfun(@(x) x+[1,1,0,0], pos, 'UniformOutput', false);
        set(h,{'position'},pos);        
        drawnow update %display updates
        pause(0.1);
    end
end

enter image description here

Additionally you should change the definition of h in makingAnts.m to:

h = zeros(n,3);

Upvotes: 4

robert
robert

Reputation: 3726

for i = 1:50 
    set(h(1),'position',[(m+0.2) (n+0.2) 2 2])
    pause(0.05) 
end

Since m, n are constants, here you are placing the ant to the same position in each iteration.

Upvotes: 2

Related Questions