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 Center および File ExchangeCoordinate Systems についてさらに検索

タグ

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by