Code covered by the BSD License  

Highlights from
The Long-term Evolution of Geosynchronous Transfer Orbits

The Long-term Evolution of Geosynchronous Transfer Orbits

by

 

Interactive MATLAB script that predicts the long-term evolution of geosynchronous transfer orbits.

getoe(ioev)
function oev = getoe(ioev)

% interactive request of classical orbital elements

% NOTE: all angular elements are returned in radians

% input

%  ioev = request array (1 = yes, 0 = no)

% output

%  oev(1) = semimajor
%  oev(2) = orbital eccentricity
%  oev(3) = orbital inclination
%  oev(4) = argument of perigee
%  oev(5) = right ascension of the ascending node (ioev(5) = 1)
%  oev(5) = east longitude of the ascending node (ioev(5) = 2)
%  oev(6) = true anomaly

% Orbital Mechanics with MATLAB

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

dtr = pi / 180;

oev = zeros(6,1);

if (ioev(1) == 1)
    % semimajor axis (kilometers)
    % (semimajor axis > req)

    for itry = 1:1:5
        fprintf('\nplease input the semimajor axis (kilometers)');
        fprintf('\n(semimajor axis > 0)\n');

        sma = input('? ');

        if (sma > 0)
            break;
        end
    end
    oev(1) = sma;
end

if (ioev(2) == 1)
    % orbital eccentricity (non-dimensional)
    % (0 <= eccentricity < 1)

    for itry = 1:1:5
        fprintf('\nplease input the orbital eccentricity (non-dimensional)');
        fprintf('\n(0 <= eccentricity < 1)\n');

        ecc = input('? ');

        if (ecc >= 0 && ecc < 1)
            break;
        end
    end
    oev(2) = ecc;
end

if (ioev(3) == 1)
    % orbital inclination (degrees)
    % (0 <= inclination <= 180)

    for itry = 1:1:5
        fprintf('\nplease input the orbital inclination (degrees)');
        fprintf('\n(0 <= inclination <= 180)\n');

        orbinc = input('? ');

        if (orbinc >= 0 && orbinc <= 180)
            break;
        end
    end
    oev(3) = dtr * orbinc;
end

if (ioev(4) == 1)
    % argument of perigee (degrees)
    % (0 <= argument of perigee <= 360)

    if (ecc > 0)

        for itry = 1:1:5

            fprintf('\nplease input the argument of perigee (degrees)');
            fprintf('\n(0 <= argument of perigee <= 360)\n');

            argper = input('? ');

            if (argper >= 0 && argper <= 360)
                break;
            end
        end
    else
        argper = 0;
    end
    oev(4) = dtr * argper;
end

if (ioev(5) >= 1)

    if (ioev(5) == 1)
        % raan (degrees)
        % (0 <= raan <= 360)

        if (oev(3) > 0)
            for itry = 1:1:5
                fprintf('\nplease input the right ascension of the ascending node (degrees)');
                fprintf('\n(0 <= raan <= 360)\n');

                raan = input('? ');

                if (raan >= 0 && raan <= 360)
                    break;
                end
            end
            oev(5) = dtr * raan;
        else
            oev(5) = 0;
        end
    end

    if (ioev(5) == 2)
        % elan (degrees)
        % (0 <= elan <= 360)

        if (oev(3) > 0)
            for itry = 1:1:5
                fprintf('\nplease input the east longitude of the ascending node (degrees)');
                fprintf('\n(0 <= elan <= 360)\n');

                elan = input('? ');

                if (elan >= 0 && elan <= 360)
                    break;
                end
            end
            oev(5) = dtr * elan;
        else
            oev(5) = 0;
        end
    end
end

if (ioev(6) == 1)
    % true anomaly (degrees)
    % (0 <= true anomaly <= 360)

    for itry = 1:1:5
        fprintf('\nplease input the true anomaly (degrees)');
        fprintf('\n(0 <= true anomaly <= 360)\n');

        tanom = input('? ');

        if (tanom >= 0 && tanom <= 360)
            break;
        end
    end
    oev(6) = dtr * tanom;
end





Contact us