How would i change this code so that it plots all of the circular paths and markers all at once instead of one after the other?

1 次查看(过去 30 天)
close all;
clear all;
earth_radius = 6371; % Earth radius in km
satellite_altitude = 500; % Altitude of satellites in km
num_satellites = 4;
a = 0;
b = 2*pi;
angle = (b).*rand(num_satellites,1);
r = earth_radius + satellite_altitude;
% Initialize marker position
marker_pos = zeros(num_satellites, 3);
for i = 1:num_satellites
center = [0,0,0];
th = 0:pi/20:2*pi;
x = center(1) + r.*cos(th)
y = center(2) + r.*sin(th)
z = center(3) + r.*sin(angle(i)).*cos(th)
% Plot satellite path
plot3(x,y,z,'b-.','linewidth',1)
grid on;
hold on;
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
% Plot marker at initial position
marker = plot3(x(1), y(1), z(1), 'ro','MarkerFaceColor',[1 0 0], 'MarkerSize', 10);
% Plot marker moving along the path
for j = 2:length(x)
set(marker, 'XData', x(j), 'YData', y(j), 'ZData', z(j));
drawnow;
pause(0.05); % Adjust the pause time as needed
end
end
x = 1×41
1.0e+03 * 6.8710 6.7864 6.5347 6.1221 5.5588 4.8585 4.0387 3.1194 2.1233 1.0749 0.0000 -1.0749 -2.1233 -3.1194 -4.0387 -4.8585 -5.5588 -6.1221 -6.5347 -6.7864 -6.8710 -6.7864 -6.5347 -6.1221 -5.5588 -4.8585 -4.0387 -3.1194 -2.1233 -1.0749
y = 1×41
1.0e+03 * 0 1.0749 2.1233 3.1194 4.0387 4.8585 5.5588 6.1221 6.5347 6.7864 6.8710 6.7864 6.5347 6.1221 5.5588 4.8585 4.0387 3.1194 2.1233 1.0749 0.0000 -1.0749 -2.1233 -3.1194 -4.0387 -4.8585 -5.5588 -6.1221 -6.5347 -6.7864
z = 1×41
1.0e+03 * -6.4263 -6.3472 -6.1118 -5.7259 -5.1990 -4.5441 -3.7773 -2.9175 -1.9858 -1.0053 -0.0000 1.0053 1.9858 2.9175 3.7773 4.5441 5.1990 5.7259 6.1118 6.3472 6.4263 6.3472 6.1118 5.7259 5.1990 4.5441 3.7773 2.9175 1.9858 1.0053
x = 1×41
1.0e+03 * 6.8710 6.7864 6.5347 6.1221 5.5588 4.8585 4.0387 3.1194 2.1233 1.0749 0.0000 -1.0749 -2.1233 -3.1194 -4.0387 -4.8585 -5.5588 -6.1221 -6.5347 -6.7864 -6.8710 -6.7864 -6.5347 -6.1221 -5.5588 -4.8585 -4.0387 -3.1194 -2.1233 -1.0749
y = 1×41
1.0e+03 * 0 1.0749 2.1233 3.1194 4.0387 4.8585 5.5588 6.1221 6.5347 6.7864 6.8710 6.7864 6.5347 6.1221 5.5588 4.8585 4.0387 3.1194 2.1233 1.0749 0.0000 -1.0749 -2.1233 -3.1194 -4.0387 -4.8585 -5.5588 -6.1221 -6.5347 -6.7864
z = 1×41
1.0e+03 * 6.3644 6.2860 6.0529 5.6707 5.1489 4.5003 3.7409 2.8894 1.9667 0.9956 0.0000 -0.9956 -1.9667 -2.8894 -3.7409 -4.5003 -5.1489 -5.6707 -6.0529 -6.2860 -6.3644 -6.2860 -6.0529 -5.6707 -5.1489 -4.5003 -3.7409 -2.8894 -1.9667 -0.9956
x = 1×41
1.0e+03 * 6.8710 6.7864 6.5347 6.1221 5.5588 4.8585 4.0387 3.1194 2.1233 1.0749 0.0000 -1.0749 -2.1233 -3.1194 -4.0387 -4.8585 -5.5588 -6.1221 -6.5347 -6.7864 -6.8710 -6.7864 -6.5347 -6.1221 -5.5588 -4.8585 -4.0387 -3.1194 -2.1233 -1.0749
y = 1×41
1.0e+03 * 0 1.0749 2.1233 3.1194 4.0387 4.8585 5.5588 6.1221 6.5347 6.7864 6.8710 6.7864 6.5347 6.1221 5.5588 4.8585 4.0387 3.1194 2.1233 1.0749 0.0000 -1.0749 -2.1233 -3.1194 -4.0387 -4.8585 -5.5588 -6.1221 -6.5347 -6.7864
z = 1×41
1.0e+03 * 5.5266 5.4586 5.2561 4.9243 4.4711 3.9079 3.2485 2.5090 1.7078 0.8646 0.0000 -0.8646 -1.7078 -2.5090 -3.2485 -3.9079 -4.4711 -4.9243 -5.2561 -5.4586 -5.5266 -5.4586 -5.2561 -4.9243 -4.4711 -3.9079 -3.2485 -2.5090 -1.7078 -0.8646
x = 1×41
1.0e+03 * 6.8710 6.7864 6.5347 6.1221 5.5588 4.8585 4.0387 3.1194 2.1233 1.0749 0.0000 -1.0749 -2.1233 -3.1194 -4.0387 -4.8585 -5.5588 -6.1221 -6.5347 -6.7864 -6.8710 -6.7864 -6.5347 -6.1221 -5.5588 -4.8585 -4.0387 -3.1194 -2.1233 -1.0749
y = 1×41
1.0e+03 * 0 1.0749 2.1233 3.1194 4.0387 4.8585 5.5588 6.1221 6.5347 6.7864 6.8710 6.7864 6.5347 6.1221 5.5588 4.8585 4.0387 3.1194 2.1233 1.0749 0.0000 -1.0749 -2.1233 -3.1194 -4.0387 -4.8585 -5.5588 -6.1221 -6.5347 -6.7864
z = 1×41
1.0e+03 * -6.8309 -6.7468 -6.4966 -6.0864 -5.5263 -4.8302 -4.0151 -3.1012 -2.1109 -1.0686 -0.0000 1.0686 2.1109 3.1012 4.0151 4.8302 5.5263 6.0864 6.4966 6.7468 6.8309 6.7468 6.4966 6.0864 5.5263 4.8302 4.0151 3.1012 2.1109 1.0686
  1 个评论
Mario Malic
Mario Malic 2024-3-10
Your code calculates each point within for loop and plots it. You can reorganise your code to calculate x, y and z to be a vector for 1 satelite. Afterwards, if you put it in a 2D matrix where each column represents the coordinate, you can do the same for num_satelites that will end up with 3D matrix, where each page (3rd dimension) represents a satelite.
Consult the documentation on plot3 on how to plot data when input arguments are vectors or matrices.

请先登录,再进行评论。

回答(1 个)

Mathieu NOE
Mathieu NOE 2024-3-11
simply commenting the inner for loop , and you get this result :
(I also reduced the number of theta points by factor 2 ) : th = 0:pi/10:2*pi;
earth_radius = 6371; % Earth radius in km
satellite_altitude = 500; % Altitude of satellites in km
num_satellites = 4;
a = 0;
b = 2*pi;
angle = (b).*rand(num_satellites,1);
r = earth_radius + satellite_altitude;
% Initialize marker position
marker_pos = zeros(num_satellites, 3);
for i = 1:num_satellites
center = [0,0,0];
th = 0:pi/10:2*pi;
x = center(1) + r.*cos(th);
y = center(2) + r.*sin(th);
z = center(3) + r.*sin(angle(i)).*cos(th);
% Plot satellite path
plot3(x,y,z,'b-.','linewidth',1)
grid on;
hold on;
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
% Plot marker
marker = plot3(x, y, z, 'ro','MarkerFaceColor',[1 0 0], 'MarkerSize', 10);
% % Plot marker moving along the path
% for j = 2:length(x)
% set(marker, 'XData', x(j), 'YData', y(j), 'ZData', z(j));
% drawnow;
% pause(0.05); % Adjust the pause time as needed
% end
end

类别

Help CenterFile Exchange 中查找有关 Satellite Mission Analysis 的更多信息

标签

产品


版本

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by