Beispiel #1
0
    public static CAAEclipticalElementDetails FK4B1950ToFK5J2000(double i0, double w0, double omega0)
    {
        //convert to radians
        double L         = CAACoordinateTransformation.DegreesToRadians(5.19856209);
        double J         = CAACoordinateTransformation.DegreesToRadians(0.00651966);
        double i0rad     = CAACoordinateTransformation.DegreesToRadians(i0);
        double omega0rad = CAACoordinateTransformation.DegreesToRadians(omega0);
        double sini0rad  = Math.Sin(i0rad);
        double cosi0rad  = Math.Cos(i0rad);

        //Calculate some values used later
        double cosJ = Math.Cos(J);
        double sinJ = Math.Sin(J);
        double W    = L + omega0rad;
        double cosW = Math.Cos(W);
        double sinW = Math.Sin(W);
        double A    = sinJ * sinW;
        double B    = sini0rad * cosJ + cosi0rad * sinJ * cosW;

        //Calculate the values
        CAAEclipticalElementDetails details = new CAAEclipticalElementDetails();

        details.i = CAACoordinateTransformation.RadiansToDegrees(Math.Asin(Math.Sqrt(A * A + B * B)));
        double cosi = cosi0rad * cosJ - sini0rad * sinJ * cosW;

        if (cosi < 0)
        {
            details.i = 180 - details.i;
        }

        details.w     = CAACoordinateTransformation.MapTo0To360Range(w0 + CAACoordinateTransformation.RadiansToDegrees(Math.Atan2(A, B)));
        details.omega = CAACoordinateTransformation.MapTo0To360Range(CAACoordinateTransformation.RadiansToDegrees(Math.Atan2(sini0rad * sinW, cosi0rad * sinJ + sini0rad * cosJ * cosW)) - 4.50001688);

        return(details);
    }
Beispiel #2
0
//Static methods

    /////////////////////////// Implementation ////////////////////////////////////

    public static CAAEclipticalElementDetails Calculate(double i0, double w0, double omega0, double JD0, double JD)
    {
        double T        = (JD0 - 2451545.0) / 36525;
        double Tsquared = T * T;
        double t        = (JD - JD0) / 36525;
        double tsquared = t * t;
        double tcubed   = tsquared * t;

        //Now convert to radians
        double i0rad     = CAACoordinateTransformation.DegreesToRadians(i0);
        double omega0rad = CAACoordinateTransformation.DegreesToRadians(omega0);

        double eta = (47.0029 - 0.06603 * T + 0.000598 * Tsquared) * t + (-0.03302 + 0.000598 * T) * tsquared + 0.00006 * tcubed;

        eta = CAACoordinateTransformation.DegreesToRadians(CAACoordinateTransformation.DMSToDegrees(0, 0, eta));

        double pi = 174.876384 * 3600 + 3289.4789 * T + 0.60622 * Tsquared - (869.8089 + 0.50491 * T) * t + 0.03536 * tsquared;

        pi = CAACoordinateTransformation.DegreesToRadians(CAACoordinateTransformation.DMSToDegrees(0, 0, pi));

        double p = (5029.0966 + 2.22226 * T - 0.000042 * Tsquared) * t + (1.11113 - 0.000042 * T) * tsquared - 0.000006 * tcubed;

        p = CAACoordinateTransformation.DegreesToRadians(CAACoordinateTransformation.DMSToDegrees(0, 0, p));

        double sini0rad        = Math.Sin(i0rad);
        double cosi0rad        = Math.Cos(i0rad);
        double sinomega0rad_pi = Math.Sin(omega0rad - pi);
        double cosomega0rad_pi = Math.Cos(omega0rad - pi);
        double sineta          = Math.Sin(eta);
        double coseta          = Math.Cos(eta);
        double A    = sini0rad * sinomega0rad_pi;
        double B    = -sineta * cosi0rad + coseta * sini0rad * cosomega0rad_pi;
        double irad = Math.Asin(Math.Sqrt(A * A + B * B));

        CAAEclipticalElementDetails details = new CAAEclipticalElementDetails();

        details.i = CAACoordinateTransformation.RadiansToDegrees(irad);
        double cosi = cosi0rad * coseta + sini0rad * sineta * cosomega0rad_pi;

        if (cosi < 0)
        {
            details.i = 180 - details.i;
        }

        double phi = pi + p;

        details.omega = CAACoordinateTransformation.MapTo0To360Range(CAACoordinateTransformation.RadiansToDegrees(Math.Atan2(A, B) + phi));

        A = -sineta * sinomega0rad_pi;
        B = sini0rad * coseta - cosi0rad * sineta * cosomega0rad_pi;
        double deltaw = CAACoordinateTransformation.RadiansToDegrees(Math.Atan2(A, B));

        details.w = CAACoordinateTransformation.MapTo0To360Range(w0 + deltaw);

        return(details);
    }
    //Static methods
    /////////////////////////// Implementation ////////////////////////////////////
    public static CAAEclipticalElementDetails Calculate(double i0, double w0, double omega0, double JD0, double JD)
    {
        double T = (JD0 - 2451545.0) / 36525;
        double Tsquared = T *T;
        double t = (JD - JD0) / 36525;
        double tsquared = t *t;
        double tcubed = tsquared * t;

        //Now convert to radians
        double i0rad = CT.D2R(i0);
        double omega0rad = CT.D2R(omega0);

        double eta = (47.0029 - 0.06603 *T + 0.000598 *Tsquared)*t + (-0.03302 + 0.000598 *T)*tsquared + 0.00006 *tcubed;
        eta = CT.D2R(CT.DMS2D(0, 0, eta));

        double pi = 174.876384 *3600 + 3289.4789 *T + 0.60622 *Tsquared - (869.8089 + 0.50491 *T)*t + 0.03536 *tsquared;
        pi = CT.D2R(CT.DMS2D(0, 0, pi));

        double p = (5029.0966 + 2.22226 *T - 0.000042 *Tsquared)*t + (1.11113 - 0.000042 *T)*tsquared - 0.000006 *tcubed;
        p = CT.D2R(CT.DMS2D(0, 0, p));

        double sini0rad = Math.Sin(i0rad);
        double cosi0rad = Math.Cos(i0rad);
        double sinomega0rad_pi = Math.Sin(omega0rad - pi);
        double cosomega0rad_pi = Math.Cos(omega0rad - pi);
        double sineta = Math.Sin(eta);
        double coseta = Math.Cos(eta);
        double A = sini0rad *sinomega0rad_pi;
        double B = -sineta *cosi0rad + coseta *sini0rad *cosomega0rad_pi;
        double irad = Math.Asin(Math.Sqrt(A *A + B *B));

        CAAEclipticalElementDetails details = new CAAEclipticalElementDetails();

        details.i = CT.R2D(irad);
        double cosi = cosi0rad *coseta + sini0rad *sineta *cosomega0rad_pi;
        if (cosi < 0)
          details.i = 180 - details.i;

        double phi = pi + p;
        details.omega = CT.M360(CT.R2D(Math.Atan2(A, B) + phi));

        A = -sineta *sinomega0rad_pi;
        B = sini0rad *coseta - cosi0rad *sineta *cosomega0rad_pi;
        double deltaw = CT.R2D(Math.Atan2(A, B));
        details.w = CT.M360(w0 + deltaw);

        return details;
    }
    public static CAAEclipticalElementDetails FK4B1950ToFK5J2000(double i0, double w0, double omega0)
    {
        //convert to radians
        double L = CT.D2R(5.19856209);
        double J = CT.D2R(0.00651966);
        double i0rad = CT.D2R(i0);
        double omega0rad = CT.D2R(omega0);
        double sini0rad = Math.Sin(i0rad);
        double cosi0rad = Math.Cos(i0rad);

        //Calculate some values used later
        double cosJ = Math.Cos(J);
        double sinJ = Math.Sin(J);
        double W = L + omega0rad;
        double cosW = Math.Cos(W);
        double sinW = Math.Sin(W);
        double A = sinJ *sinW;
        double B = sini0rad *cosJ + cosi0rad *sinJ *cosW;

        //Calculate the values
        CAAEclipticalElementDetails details = new CAAEclipticalElementDetails();
        details.i = CT.R2D(Math.Asin(Math.Sqrt(A *A + B *B)));
        double cosi = cosi0rad *cosJ - sini0rad *sinJ *cosW;
        if (cosi < 0)
          details.i = 180 - details.i;

        details.w = CT.M360(w0 + CT.R2D(Math.Atan2(A, B)));
        details.omega = CT.M360(CT.R2D(Math.Atan2(sini0rad *sinW, cosi0rad *sinJ + sini0rad *cosJ *cosW)) - 4.50001688);

        return details;
    }
    //Static methods
    /////////////////////////// Implementation ////////////////////////////////////
    public static CAAEclipticalElementDetails Calculate(double i0, double w0, double omega0, double JD0, double JD)
    {
        var T = (JD0 - 2451545.0) / 36525;
        var Tsquared = T *T;
        var t = (JD - JD0) / 36525;
        var tsquared = t *t;
        var tcubed = tsquared * t;

        //Now convert to radians
        var i0rad = CAACoordinateTransformation.DegreesToRadians(i0);
        var omega0rad = CAACoordinateTransformation.DegreesToRadians(omega0);

        var eta = (47.0029 - 0.06603 *T + 0.000598 *Tsquared)*t + (-0.03302 + 0.000598 *T)*tsquared + 0.00006 *tcubed;
        eta = CAACoordinateTransformation.DegreesToRadians(CAACoordinateTransformation.DMSToDegrees(0, 0, eta));

        var pi = 174.876384 *3600 + 3289.4789 *T + 0.60622 *Tsquared - (869.8089 + 0.50491 *T)*t + 0.03536 *tsquared;
        pi = CAACoordinateTransformation.DegreesToRadians(CAACoordinateTransformation.DMSToDegrees(0, 0, pi));

        var p = (5029.0966 + 2.22226 *T - 0.000042 *Tsquared)*t + (1.11113 - 0.000042 *T)*tsquared - 0.000006 *tcubed;
        p = CAACoordinateTransformation.DegreesToRadians(CAACoordinateTransformation.DMSToDegrees(0, 0, p));

        var sini0rad = Math.Sin(i0rad);
        var cosi0rad = Math.Cos(i0rad);
        var sinomega0rad_pi = Math.Sin(omega0rad - pi);
        var cosomega0rad_pi = Math.Cos(omega0rad - pi);
        var sineta = Math.Sin(eta);
        var coseta = Math.Cos(eta);
        var A = sini0rad *sinomega0rad_pi;
        var B = -sineta *cosi0rad + coseta *sini0rad *cosomega0rad_pi;
        var irad = Math.Asin(Math.Sqrt(A *A + B *B));

        var details = new CAAEclipticalElementDetails {i = CAACoordinateTransformation.RadiansToDegrees(irad)};

          var cosi = cosi0rad *coseta + sini0rad *sineta *cosomega0rad_pi;
        if (cosi < 0)
          details.i = 180 - details.i;

        var phi = pi + p;
        details.omega = CAACoordinateTransformation.MapTo0To360Range(CAACoordinateTransformation.RadiansToDegrees(Math.Atan2(A, B) + phi));

        A = -sineta *sinomega0rad_pi;
        B = sini0rad *coseta - cosi0rad *sineta *cosomega0rad_pi;
        var deltaw = CAACoordinateTransformation.RadiansToDegrees(Math.Atan2(A, B));
        details.w = CAACoordinateTransformation.MapTo0To360Range(w0 + deltaw);

        return details;
    }
    public static CAAEclipticalElementDetails FK4B1950ToFK5J2000(double i0, double w0, double omega0)
    {
        //convert to radians
        var L = CAACoordinateTransformation.DegreesToRadians(5.19856209);
        var J = CAACoordinateTransformation.DegreesToRadians(0.00651966);
        var i0rad = CAACoordinateTransformation.DegreesToRadians(i0);
        var omega0rad = CAACoordinateTransformation.DegreesToRadians(omega0);
        var sini0rad = Math.Sin(i0rad);
        var cosi0rad = Math.Cos(i0rad);

        //Calculate some values used later
        var cosJ = Math.Cos(J);
        var sinJ = Math.Sin(J);
        var W = L + omega0rad;
        var cosW = Math.Cos(W);
        var sinW = Math.Sin(W);
        var A = sinJ *sinW;
        var B = sini0rad *cosJ + cosi0rad *sinJ *cosW;

        //Calculate the values
        var details = new CAAEclipticalElementDetails
        {
        i = CAACoordinateTransformation.RadiansToDegrees(Math.Asin(Math.Sqrt(A*A + B*B)))
        };
          var cosi = cosi0rad *cosJ - sini0rad *sinJ *cosW;
        if (cosi < 0)
          details.i = 180 - details.i;

        details.w = CAACoordinateTransformation.MapTo0To360Range(w0 + CAACoordinateTransformation.RadiansToDegrees(Math.Atan2(A, B)));
        details.omega = CAACoordinateTransformation.MapTo0To360Range(CAACoordinateTransformation.RadiansToDegrees(Math.Atan2(sini0rad *sinW, cosi0rad *sinJ + sini0rad *cosJ *cosW)) - 4.50001688);

        return details;
    }