Can someone explain why my graph is not generating any lines. I copied my code from this video https://www.youtube.com/watch?v=vaMiCkrRC6Q
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
clear
clf
%All Constants Used
G = 6.67408e-11;
M = 5.9722e24;
m = 1000;
%Changing Variables
r = [6.67e6, 0 , 0]; %Radius
v = [0, sqrt(G*M/norm(r(1,:),2)),0 ]; %Hohmann Equation
t = 0.0; %Start time
dt = 1; %Steps/Change in Calculation
DeltaV = 2420; %Change in Velocity
TtoDeltaV = 5431;
%First Orbit
rplot = r;
while t <= TtoDeltaV
rlen = norm(r,2); %Radius Magnitude
accel = -G*M/rlen^2;
nextv = v + accel*dt*r/rlen;
nextr = r + dt*v;
t = t + dt;
rplot = [rplot, nextr];
v = nextv;
r = nextr;
end
hold on;
Orbit1 = plot(rplot(:,1), rplot(:,2),'b','LineWidth',1);
%Second Orbit
rplot = r;
theta = 0;
rp = r;
rplen = norm(rp,2);
nextv = v + DeltaV*[0 1 0];
v = nextv;
while theta <= 3.14159 %Position Vector
rlen = norm(r,2);
accel = -G*M/rlen^2;
nextv = v + dt*accel*r/rlen;
nextr = r + dt*v;
t = t + dt;
rplot = [rplot, nextr];
v = nextv;
r = nextr;
tempDot = dot(rp,r); %Dot product
costheta = tempDot/(rlen*rplen);
theta = acos(costheta);
end
disp("Sat reaches forbits at t = " + t + "s")
Orbit2 = plot(rplot(:,1), rplot(:,2),'r','LineWidth',1);
%Orbit 3
rplot = r;
tstart = t; %Start or Orbit
OrbitP = (2*pi)*sqrt(norm(r,2).^3)/(G*M);
OrbitV = sqrt((G*M)/norm(r,2));
DeltaV = OrbitV - norm(v,2);
nextv = v + DeltaV*[0 -1 0]; %-1 to add the direction of going down
v = nextv;
while t < (tstart +OrbitP);
rlen = norm(r,2);
accel = -G*M/rlen^2;
nextv = v + dt*accel*r/rlen;
nextr = r + dt*v;
t = t + dt;
rplot = [rplot, nextr];
v = nextv;
r = nextr;
end
Orbit3 = plot(rplot(:,1),rplot(:,2),'k','LineWidth',1);
title('Hohmanns Transfer Orbit');
0 Kommentare
Antworten (1)
Walter Roberson
am 4 Dez. 2023
clear
clf
%All Constants Used
G = 6.67408e-11;
M = 5.9722e24;
m = 1000;
%Changing Variables
r = [6.67e6, 0 , 0]; %Radius
v = [0, sqrt(G*M/norm(r(1,:),2)),0 ]; %Hohmann Equation
t = 0.0; %Start time
dt = 1; %Steps/Change in Calculation
DeltaV = 2420; %Change in Velocity
TtoDeltaV = 5431;
%First Orbit
rplot = r;
while t <= TtoDeltaV
rlen = norm(r,2); %Radius Magnitude
accel = -G*M/rlen^2;
nextv = v + accel*dt*r/rlen;
nextr = r + dt*v;
t = t + dt;
rplot = [rplot, nextr];
v = nextv;
r = nextr;
end
hold on;
Orbit1 = plot(rplot(:,1), rplot(:,2),'b','LineWidth',1);
%Second Orbit
rplot = r;
theta = 0;
rp = r;
rplen = norm(rp,2);
nextv = v + DeltaV*[0 1 0];
v = nextv;
while theta <= 3.14159 %Position Vector
rlen = norm(r,2);
accel = -G*M/rlen^2;
nextv = v + dt*accel*r/rlen;
nextr = r + dt*v;
t = t + dt;
rplot = [rplot, nextr];
v = nextv;
r = nextr;
tempDot = dot(rp,r); %Dot product
costheta = tempDot/(rlen*rplen);
theta = acos(costheta);
end
disp("Sat reaches forbits at t = " + t + "s")
Orbit2 = plot(rplot(:,1), rplot(:,2),'r','LineWidth',1);
%Orbit 3
rplot = r;
tstart = t; %Start or Orbit
OrbitP = (2*pi)*sqrt(norm(r,2).^3)/(G*M);
OrbitV = sqrt((G*M)/norm(r,2));
DeltaV = OrbitV - norm(v,2);
nextv = v + DeltaV*[0 -1 0]; %-1 to add the direction of going down
v = nextv;
t
tstart
OrbitP
dt
OrbitP is less than dt. When you add t = t + dt then the result is going to be more than tstart + OrbitP
while t < (tstart +OrbitP);
rlen = norm(r,2);
accel = -G*M/rlen^2;
nextv = v + dt*accel*r/rlen;
nextr = r + dt*v;
t = t + dt;
rplot = [rplot, nextr];
v = nextv;
r = nextr;
end
so you are only going to have one point to plot.
You also have the problem that v is a 1 x 3 vector, so nextr will be a 1 x 3 vector, so your [rplot, nextr] is horzontal concatenating together 1 x 3 vectors each time -- but you expect to extract columns out of the result.
Orbit3 = plot(rplot(:,1),rplot(:,2),'k','LineWidth',1);
title('Hohmanns Transfer Orbit');
0 Kommentare
Siehe auch
Kategorien
Mehr zu CubeSat and Satellites finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

