Select Git revision
rocketPlot.m
-
giuliaghirardini authoredgiuliaghirardini authored
rocketPlot.m 3.90 KiB
function roc = rocketPlot(mission, rocket)
arguments
mission Mission
rocket Rocket
end
deltaXLE = rocket.rear.finsDeltaXFreeChord;
r = rocket.diameter/2;
height = rocket.rear.finsHeight;
C1 = rocket.rear.finsRootChord;
C2 = rocket.rear.finsFreeChord;
Lcent = rocket.lengthCenter;
Lnos = rocket.parafoil.noseLength;
Xle1 = Lcent + Lnos - rocket.rear.finsAxialDistance - C1;
Daft = rocket.rear.boatFinalDiameter;
Laft = rocket.rear.boatLength;
xNos = Lnos - Lnos*cos(linspace(0, pi/2, 50));
if strcmp(rocket.parafoil.noseType, 'KARMAN')
theta = @(x) acos( 1 - ( (2*x)./Lnos ) );
Karman = @(x) ( r/sqrt(pi) ) * sqrt( theta(x) - ( sin(2*theta(x))./ 2 ) );
yNos = Karman(xNos);
elseif strcmp(rocket.parafoil.noseType, 'HAACK')
theta = @(x) acos( 1 - ( (2*x)./Lnos ) );
Haack = @(x) ( r/sqrt(pi) ) * sqrt( theta(x) - ( sin(2*theta(x))./ 2 ) + (1/3)*sin(theta(x)).^3 );
yNos = Haack(xNos);
elseif strcmp(rocket.parafoil.noseType, 'OGIVE')
rho = (r^2 + Lnos^2)/(2*r);
Ogive = @(x) sqrt(rho^2 - (Lnos - x).^2) + r - rho;
yNos = Ogive(xNos);
elseif strcmp(rocket.parafoil.noseType, 'POWER')
power = rocket.parafoil.nosePower;
Power = @(x) r * (x/Lnos).^(power);
yNos = Power(xNos);
elseif strcmp(rocket.parafoil.noseType, 'MHAACK')
p = rocket.parafoil.nosePMod;
c = rocket.parafoil.noseCMod;
xMod = @(x, p) (x/Lnos).^(p)*Lnos;
thetaMod = @(x, p) acos( 1 - ( (2*xMod(x, p))./Lnos ) );
haackSeriesMod = @(x, p, C) ( r/sqrt(pi) ) * sqrt( thetaMod(x, p) ...
- ( sin(2*thetaMod(x, p))./ 2 ) + C*sin(thetaMod(x, p)).^3 );
yNos = haackSeriesMod(xNos, p, c);
end
if strcmp(rocket.rear.boatType, 'OGIVE') % [-] Boat-tail shape. 0: Cone, 1: Tangent Ogive
[xBoat, yBoat] = computeTangentBoatPoints(2*r, Daft, Laft);
else
xBoat = [0 Laft];
yBoat = [r Daft/2];
end
%%% figure begin
roc = figure();
hold on
%%% NOSECONE
plot(xNos, yNos, 'k');
plot(xNos, -yNos, 'k');
plot([Lnos Lnos], [-r r], 'k');
%%% CENTERBODY
plot([Lnos Lnos+Lcent], [r r], 'k');
plot([Lnos Lnos+Lcent], [-r -r], 'k');
plot([Lnos+Lcent Lnos+Lcent], [-r r], 'k');
%%% BOAT-TAIL PLOT
plot(xBoat+Lnos+Lcent, yBoat, 'k');
plot(xBoat+Lnos+Lcent, -yBoat, 'k');
plot([Lnos+Lcent+Laft Lnos+Lcent+Laft], [-Daft/2 Daft/2], 'k');
%%% FINS PLOT
% top
plot([Xle1 Xle1+deltaXLE], [r r+height],'k');
plot([Xle1+C1 Xle1+deltaXLE+C2], [r r+height],'k');
plot([Xle1+deltaXLE Xle1+deltaXLE+C2], [r+height r+height],'k');
plot([Xle1 Xle1+C1], [r r], 'k');
% bottom
plot([Xle1 Xle1+deltaXLE], [-r -r-height],'k');
plot([Xle1+C1 Xle1+deltaXLE+C2], [-r -r-height],'k');
plot([Xle1+deltaXLE Xle1+deltaXLE+C2], [-r-height, -r-height],'k');
plot([Xle1 Xle1+C1], [-r -r], 'k');
% plot([Xle1 Xle1+deltaXLE], [r+height r+height], 'k--')
% plot([Xle1+deltaXLE Xle1+deltaXLE], [r+height r],'k--')
%%% BAYS
lengths = rocket.absolutePositions.values + 2*Lnos;
bays = rocket.absolutePositions.keys;
xline(0,'r-.', 'Label', 'NOSE', ...
'LabelOrientation', 'aligned', 'LabelVerticalAlignment', 'bottom', ...
'LabelHorizontalAlignment', 'right');
for i = 1:length(lengths)
xline(lengths(i), '--', 'Label', bays(i), ...
'LabelOrientation', 'aligned', 'LabelVerticalAlignment', 'bottom', ...
'LabelHorizontalAlignment', 'right');
end
boatPlotLength = rocket.length - rocket.rear.boatLength;
xline(boatPlotLength,'r-.', 'Label', 'BOAT-TAIL', ...
'LabelOrientation', 'aligned', 'LabelVerticalAlignment', 'bottom', ...
'LabelHorizontalAlignment', 'right');
axis equal
% set(gca, 'xlim', [-100, Lnos+Lcent+Laft+100]);
%%% TITLE
title(string(strrep(mission.name, '_', ' ')));
end