Skip to content
Snippets Groups Projects
Select Git revision
  • preliminary-sims
  • CoefficientCsv
  • weather-forecast-analysis
  • main default protected
  • prp-integration
  • alpha-phi
  • test-9K
  • stability-bugs
  • archive/benchmark
9 results

rocketPlot.m

Blame
  • 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