title: MATLAB - How to make multiple markers moving simultaneous in 3d plot in MATLAB
body: <p>I am currently working on a project simulating the movement of two spacecraft and a moon (Phobos) around Mars. A MATLAB tool called SPICE gives me an array with the x, y and z distances and I have used these to plot the orbit which works fine. Now I want to get markers for each of the spacecraft and Phobos to see when they flyby each other. I got the markers working but not at the same time, they run after each other. I found an example on youtube so it must be possible but he has not released the code how to do it (<a href="https://www.youtube.com/watch?v=nArR2P0o4r4" rel="nofollow">https://www.youtube.com/watch?v=nArR2P0o4r4</a>).</p>
  
  <p>This is the code I have:</p>
  
  <pre><code>a = position_MEX_Mars(1,:);
  b = position_MEX_Mars(2,:);
  c = position_MEX_Mars(3,:);
  k = position_MAVEN_Mars(1,:);
  l = position_MAVEN_Mars(2,:);
  m = position_MAVEN_Mars(3,:);
  x = position_Phobos_Mars(1,:);
  y = position_Phobos_Mars(2,:);
  z = position_Phobos_Mars(3,:);
  ah = axes;
  set(ah,'XLim',[min(x) max(x)],'YLim',[min(y) max(y)],...
      'ZLim',[min(z) max(z)]);
  plot3(0,0,0,'ro-',x,y,z,a,b,c,k,l,m);
  grid on;
  hold on;
  hpoint = line('XData', 0,'YData', 0,'ZData', 0,'Color','black','Marker',...
      'o','MarkerSize',10);
  ht = hgtransform('parent',ah);
  set(hpoint,'Parent',ht);
  for i =2:length(x)
      trans = makehgtform('translate',[x(i) y(i) z(i)]);
      set(ht,'Matrix',trans);
      pause(0.001);
  end
  </code></pre>
  
  <p>This will run a nice animated plot of the trajectory of Phobos in time but only Phobos and not simultaneous with MEX and MAVEN (spacecraft from ESA and NASA).</p>
  
  <p>I tried this but does not work:</p>
  
  <pre><code>a = position_MEX_Mars(1,:);
  b = position_MEX_Mars(2,:);
  c = position_MEX_Mars(3,:);
  k = position_MAVEN_Mars(1,:);
  l = position_MAVEN_Mars(2,:);
  m = position_MAVEN_Mars(3,:);
  x = position_Phobos_Mars(1,:);
  y = position_Phobos_Mars(2,:);
  z = position_Phobos_Mars(3,:);
  ah = axes;
  set(ah,'XLim',[min(x) max(x)],'YLim',[min(y) max(y)],...
      'ZLim',[min(z) max(z)]);
  plot3(0,0,0,'ro-',x,y,z,a,b,c,k,l,m);
  grid on;
  hold on;
  hpoint = line('XData', 0,'YData', 0,'ZData', 0,'Color','black','Marker',...
      'o','MarkerSize',10);
  ht = hgtransform('parent',ah);
  set(hpoint,'Parent',ht);
  for i =2:length(x)
      trans1 = makehgtform('translate',[x(i) y(i) z(i)]);
      set(ht,'Matrix',trans1);
      trans2 = makehgtform('translate',[a(i) b(i) c(i)]);
      set(ht,'Matrix',trans2);
      pause(0.001);
  end
  </code></pre>
  
  <p>I also tried merging the arrays so that it plots them each one step after each other but that makes the animation not smooth and is not satisfying for the project.</p>
  
  <pre><code>a = position_MEX_Mars(1,:);
  b = position_MEX_Mars(2,:);
  c = position_MEX_Mars(3,:);
  k = position_MAVEN_Mars(1,:);
  l = position_MAVEN_Mars(2,:);
  m = position_MAVEN_Mars(3,:);
  x = position_Phobos_Mars(1,:);
  y = position_Phobos_Mars(2,:);
  z = position_Phobos_Mars(3,:);
  tempx = [position_MEX_Mars(1,:); position_Phobos_Mars(1,:); position_MAVEN_Mars(1,:)];
  xt = tempx(:);
  tempy = [position_MEX_Mars(2,:); position_Phobos_Mars(2,:); position_MAVEN_Mars(2,:)];
  yt = tempy(:);
  tempz = [position_MEX_Mars(3,:); position_Phobos_Mars(3,:); position_MAVEN_Mars(3,:)];
  zt = tempz(:);
  ah = axes;
  set(ah,'XLim',[min(x) max(x)],'YLim',[min(y) max(y)],...
      'ZLim',[min(z) max(z)]);
  plot3(0,0,0,'ro-',x,y,z,a,b,c,k,l,m);
  grid on;
  hold on;
  hpoint = line('XData', 0,'YData', 0,'ZData', 0,'Color','black','Marker',...
      'o','MarkerSize',10);
  ht = hgtransform('parent',ah);
  set(hpoint,'Parent',ht);
  for i =2:length(x)
      trans = makehgtform('translate',[xt(i) yt(i) zt(i)]);
      set(ht,'Matrix',trans);
      pause(0.001);
  end
  </code></pre>
  
  <p>I think I am close but I seem to be missing something and my knowledge of MATLAB is not that great yet. I hope you can help me out.</p>
  
  <p>Cheers Jeroen</p>