5

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
2
  • 1
    Can somebody explain why this question has received so many upvotes? Commented Nov 15, 2014 at 19:41
  • @franz1 - Most likely because it's a cool problem to solve, even though the problem statement is not as verbose as the answers in this post. Commented Dec 14, 2014 at 5:36

3 Answers 3

4

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);
Sign up to request clarification or add additional context in comments.

Comments

4
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

Comments

2
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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.