Advertisement
dmkozyrev

example.m

Jun 3rd, 2017
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 2.53 KB | None | 0 0
  1. function example  
  2.   R = 6371;
  3.  
  4.   a = [4*R 3*R 2*R];
  5.   e = [0.3 0.05 0.15];
  6.   i = [pi/9 pi/4 pi/3];
  7.   Omega = [pi/6 pi/3 pi];
  8.   omega = [pi/3 2*pi/3 5*pi/3];
  9.   T = [90 60 180];
  10.  
  11.   color_track = ['r', 'b' 'g'];
  12.   color_bind = {'--b', '--g', '--r'};
  13.  
  14.   len = max(T);
  15.  
  16.   count = length(a);
  17.   sp_x = sp_y = sp_z = zeros(count, len);
  18.   max_value = 0;
  19.   for id = 1:length(a)
  20.     [sp_x(id, :), sp_y(id, :), sp_z(id, :)] = one_sputnik(a(id), e(id), i(id), Omega(id), omega(id), T(id), len);
  21.     tm1 = max(abs(sp_x(id, :)));
  22.     tm2 = max(abs(sp_y(id, :)));
  23.     tm3 = max(abs(sp_z(id, :)));
  24.     max_value = max([max_value, tm1, tm2, tm3]);
  25.   end
  26.  
  27.   for id = 1:length(a)
  28.     sp_x(id, :) /= max_value;
  29.     sp_y(id, :) /= max_value;
  30.     sp_z(id, :) /= max_value;
  31.   end
  32.  
  33.   R /= max_value;
  34.  
  35.   [X, Y, Z] = sphere(25);
  36.   mesh(R*X, R*Y, R*Z);
  37.  
  38.   axis ([-1 1 -1 1 -1 1]);
  39.   hold on;
  40.   xlabel('x');
  41.   ylabel('y');
  42.   zlabel('z');
  43.  
  44.  
  45.   count = length(a);
  46.   k = 1;
  47.   r = R / 10;
  48.   x0 = y0 = z0 = h = sputnik = zeros(1, count);
  49.   for id = 1:length(a)
  50.     sputnik(id) = surf(X*r+sp_x(id, k), Y*r+sp_y(id, k), Z*r+sp_z(id, k));
  51.     h(id) = plot3([0 sp_x(id, k)], [0 sp_y(id, k)], [0 sp_z(id, k)], color_bind{id});
  52.     x0(id) = sp_x(id, k);
  53.     y0(id) = sp_y(id, k);
  54.     z0(id) = sp_z(id, k);
  55.   end
  56.  
  57.   k = ones(1, count);
  58.   for t = 2:len
  59.     for id = 1:count
  60.       k(id)++;
  61.       if (k(id) > T(id))
  62.         k(id) = 1;
  63.       end
  64.       plot3([x0(id), sp_x(id, k(id))], [y0(id), sp_y(id, k(id))], [z0(id), sp_z(id, k(id))], color_track(id));
  65. %      disp(size(x0));
  66. %      disp(size(sp_x(id, k)));
  67.       x0(id) = sp_x(id, k(id));
  68.       y0(id) = sp_y(id, k(id));
  69.       z0(id) = sp_z(id, k(id));
  70.       delete(sputnik(id));
  71.       delete(h(id));
  72.       sputnik(id) = surf(X*r+sp_x(id, k(id)), Y*r+sp_y(id, k(id)), Z*r+sp_z(id, k(id)));
  73.       h(id) = plot3([0 sp_x(id, k(id))], [0 sp_y(id, k(id))], [0 sp_z(id, k(id))], color_bind{id});
  74.     end
  75.     pause(0.001);
  76.   end
  77. end
  78.  
  79. function [x, y, z] = one_sputnik(a, e, i, Omega, omega, T, len)
  80.   cos_Omega = cos(Omega);
  81.   sin_Omega = sin(Omega);
  82.  
  83.   cos_i = cos(i);
  84.   sin_i = sin(i);
  85.  
  86.   dt = 2*pi/T;
  87.   t = [0:dt:2*pi-dt, zeros(1, len-T)];
  88.   x = y = z = zeros(1, length(t));
  89.   for k = 1:length(t)
  90.     r = a*(1-e^2)/(1+e*cos(t(k)));
  91.     sin_omega = sin(t(k)+omega);
  92.     cos_omega = cos(t(k)+omega);
  93.     x(k) = r*(cos_Omega*cos_omega-sin_Omega*sin_omega*cos_i);
  94.     y(k) = r*(sin_Omega*cos_omega+cos_Omega*sin_omega*cos_i);
  95.     z(k) = r*sin_omega*sin_i;
  96.   end
  97. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement