public static AstroRaDec GetPlanet(double jDate, EO planetIn, double locLat, double locLong, double locHeight)
        {
            int planet = (int)planetIn;

//C++ TO C# CONVERTER NOTE: This static local variable declaration (not allowed in C#) has been moved just prior to the method:
//			static CAAGalileanMoonsDetails galDetails;
//C++ TO C# CONVERTER NOTE: This static local variable declaration (not allowed in C#) has been moved just prior to the method:
//			static CAAEllipticalPlanetaryDetails jupDetails;
//C++ TO C# CONVERTER NOTE: This static local variable declaration (not allowed in C#) has been moved just prior to the method:
//			static CAAPhysicalJupiterDetails jupPhisical;
//C++ TO C# CONVERTER NOTE: This static local variable declaration (not allowed in C#) has been moved just prior to the method:
//			static double jDateLast = 0;

            locLong = -locLong;
            if (planet < 9)
            {
                EPD Details   = ELL.Calculate(jDate, planetIn);
                COR corrected = CAAParallax.Equatorial2Topocentric(Details.ApparentGeocentricRA, Details.ApparentGeocentricDeclination, Details.ApparentGeocentricDistance, locLong, locLat, locHeight, jDate);
                return(new AstroRaDec(corrected.X, corrected.Y, Details.ApparentGeocentricDistance, false, false));
            }
            else if (planet == 9)
            {
                double lat       = CAAMoon.EclipticLatitude(jDate);
                double lng       = CAAMoon.EclipticLongitude(jDate);
                double dis       = CAAMoon.RadiusVector(jDate) / 149598000;
                double epsilon   = CAANutation.TrueObliquityOfEcliptic(jDate);
                COR    d         = CT.Ec2Eq(lng, lat, epsilon);
                COR    corrected = CAAParallax.Equatorial2Topocentric(d.X, d.Y, dis, locLong, locLat, locHeight, jDate);

                return(new AstroRaDec(corrected.X, corrected.Y, dis, false, false));
            }
            else
            {
                if (jDate != jDateLast)
                {
                    jupDetails  = ELL.Calculate(jDate, (EO)4);
                    jupPhisical = CAAPhysicalJupiter.Calculate(jDate);
                    COR corrected = CAAParallax.Equatorial2Topocentric(jupDetails.ApparentGeocentricRA, jupDetails.ApparentGeocentricDeclination, jupDetails.ApparentGeocentricDistance, locLong, locLat, locHeight, jDate);
                    jupDetails.ApparentGeocentricRA          = corrected.X;
                    jupDetails.ApparentGeocentricDeclination = corrected.Y;
                    galDetails = GM.Calculate(jDate);
                    jDateLast  = jDate;
                }


                double jupiterDiameter = 0.000954501;
                double scale           = (Math.Atan(.5 * (jupiterDiameter / jupDetails.ApparentGeocentricDistance))) / 3.1415927 * 180;

                double raScale = (scale / Math.Cos(jupDetails.ApparentGeocentricDeclination / 180.0 * 3.1415927)) / 15;

                double xMoon    = 0;
                double yMoon    = 0;
                double zMoon    = 0;
                bool   shadow   = false;
                bool   eclipsed = false;

                switch (planet)
                {
                case 10:                         // IO
                    xMoon    = galDetails.Satellite1.ApparentRectangularCoordinates.X;
                    yMoon    = galDetails.Satellite1.ApparentRectangularCoordinates.Y;
                    zMoon    = galDetails.Satellite1.ApparentRectangularCoordinates.Z;
                    eclipsed = galDetails.Satellite1.bInEclipse;
                    shadow   = galDetails.Satellite1.bInShadowTransit;
                    break;

                case 11:                         //Europa
                    xMoon    = galDetails.Satellite2.ApparentRectangularCoordinates.X;
                    yMoon    = galDetails.Satellite2.ApparentRectangularCoordinates.Y;
                    zMoon    = galDetails.Satellite2.ApparentRectangularCoordinates.Z;
                    eclipsed = galDetails.Satellite2.bInEclipse;
                    shadow   = galDetails.Satellite2.bInShadowTransit;
                    break;

                case 12:                         //Ganymede
                    xMoon    = galDetails.Satellite3.ApparentRectangularCoordinates.X;
                    yMoon    = galDetails.Satellite3.ApparentRectangularCoordinates.Y;
                    zMoon    = galDetails.Satellite3.ApparentRectangularCoordinates.Z;
                    eclipsed = galDetails.Satellite3.bInEclipse;
                    shadow   = galDetails.Satellite3.bInShadowTransit;
                    break;

                case 13:                         //Callisto
                    xMoon    = galDetails.Satellite4.ApparentRectangularCoordinates.X;
                    yMoon    = galDetails.Satellite4.ApparentRectangularCoordinates.Y;
                    zMoon    = galDetails.Satellite4.ApparentRectangularCoordinates.Z;
                    eclipsed = galDetails.Satellite4.bInEclipse;
                    shadow   = galDetails.Satellite4.bInShadowTransit;
                    break;

                case 14:                         // IO Shadow
                    xMoon  = galDetails.Satellite1.ApparentShadowRectangularCoordinates.X;
                    yMoon  = galDetails.Satellite1.ApparentShadowRectangularCoordinates.Y;
                    zMoon  = galDetails.Satellite1.ApparentShadowRectangularCoordinates.Z * .9;
                    shadow = galDetails.Satellite1.bInShadowTransit;
                    break;

                case 15:                         //Europa Shadow
                    xMoon  = galDetails.Satellite2.ApparentShadowRectangularCoordinates.X;
                    yMoon  = galDetails.Satellite2.ApparentShadowRectangularCoordinates.Y;
                    zMoon  = galDetails.Satellite2.ApparentShadowRectangularCoordinates.Z * .9;
                    shadow = galDetails.Satellite2.bInShadowTransit;
                    break;

                case 16:                         //Ganymede Shadow
                    xMoon  = galDetails.Satellite3.ApparentShadowRectangularCoordinates.X;
                    yMoon  = galDetails.Satellite3.ApparentShadowRectangularCoordinates.Y;
                    zMoon  = galDetails.Satellite3.ApparentShadowRectangularCoordinates.Z * .9;
                    shadow = galDetails.Satellite3.bInShadowTransit;
                    break;

                case 17:                         //Callisto Shadow
                    xMoon  = galDetails.Satellite4.ApparentShadowRectangularCoordinates.X;
                    yMoon  = galDetails.Satellite4.ApparentShadowRectangularCoordinates.Y;
                    zMoon  = galDetails.Satellite4.ApparentShadowRectangularCoordinates.Z * .9;
                    shadow = galDetails.Satellite4.bInShadowTransit;
                    break;
                }

                double xTemp;
                double yTemp;
                double radians = jupPhisical.P / 180.0 * 3.1415927;
                xTemp = xMoon * Math.Cos(radians) - yMoon * Math.Sin(radians);
                yTemp = xMoon * Math.Sin(radians) + yMoon * Math.Cos(radians);
                xMoon = xTemp;
                yMoon = yTemp;

                return(new AstroRaDec(jupDetails.ApparentGeocentricRA - (xMoon * raScale), jupDetails.ApparentGeocentricDeclination + yMoon * scale, jupDetails.ApparentGeocentricDistance + (zMoon * jupiterDiameter / 2), shadow, eclipsed));
            }
        }
Exemplo n.º 2
0
    public static EPD Calculate(double JD, EO @object)
    {
        //What will the the return value
        EPD details = new EPD();

        double JD0   = JD;
        double L0    = 0;
        double B0    = 0;
        double R0    = 0;
        double cosB0 = 0;

        if (@object != EO.SUN)
        {
            L0    = CAAEarth.EclipticLongitude(JD0);
            B0    = CAAEarth.EclipticLatitude(JD0);
            R0    = CAAEarth.RadiusVector(JD0);
            L0    = CT.D2R(L0);
            B0    = CT.D2R(B0);
            cosB0 = Math.Cos(B0);
        }


        //Calculate the initial values
        double L = 0;
        double B = 0;
        double R = 0;

        double Lrad;
        double Brad;
        double cosB;
        double cosL;
        double x;
        double y;
        double z;
        bool   bRecalc      = true;
        bool   bFirstRecalc = true;
        double LPrevious    = 0;
        double BPrevious    = 0;
        double RPrevious    = 0;

        while (bRecalc)
        {
            switch (@object)
            {
            case EO.SUN:
            {
                L = CAASun.GeometricEclipticLongitude(JD0);
                B = CAASun.GeometricEclipticLatitude(JD0);
                R = CAAEarth.RadiusVector(JD0);
                break;
            }

            case EO.MERCURY:
            {
                L = CAAMercury.EclipticLongitude(JD0);
                B = CAAMercury.EclipticLatitude(JD0);
                R = CAAMercury.RadiusVector(JD0);
                break;
            }

            case EO.VENUS:
            {
                L = CAAVenus.EclipticLongitude(JD0);
                B = CAAVenus.EclipticLatitude(JD0);
                R = CAAVenus.RadiusVector(JD0);
                break;
            }

            case EO.MARS:
            {
                L = CAAMars.EclipticLongitude(JD0);
                B = CAAMars.EclipticLatitude(JD0);
                R = CAAMars.RadiusVector(JD0);
                break;
            }

            case EO.JUPITER:
            {
                L = CAAJupiter.EclipticLongitude(JD0);
                B = CAAJupiter.EclipticLatitude(JD0);
                R = CAAJupiter.RadiusVector(JD0);
                break;
            }

            case EO.SATURN:
            {
                L = CAASaturn.EclipticLongitude(JD0);
                B = CAASaturn.EclipticLatitude(JD0);
                R = CAASaturn.RadiusVector(JD0);
                break;
            }

            case EO.URANUS:
            {
                L = CAAUranus.EclipticLongitude(JD0);
                B = CAAUranus.EclipticLatitude(JD0);
                R = CAAUranus.RadiusVector(JD0);
                break;
            }

            case EO.NEPTUNE:
            {
                L = CAANeptune.EclipticLongitude(JD0);
                B = CAANeptune.EclipticLatitude(JD0);
                R = CAANeptune.RadiusVector(JD0);
                break;
            }

            case EO.PLUTO:
            {
                L = CAAPluto.EclipticLongitude(JD0);
                B = CAAPluto.EclipticLatitude(JD0);
                R = CAAPluto.RadiusVector(JD0);
                break;
            }

            default:
            {
                Debug.Assert(false);
                break;
            }
            }

            if (!bFirstRecalc)
            {
                bRecalc   = ((Math.Abs(L - LPrevious) > 0.00001) || (Math.Abs(B - BPrevious) > 0.00001) || (Math.Abs(R - RPrevious) > 0.000001));
                LPrevious = L;
                BPrevious = B;
                RPrevious = R;
            }
            else
            {
                bFirstRecalc = false;
            }



            //Calculate the new value
            if (bRecalc)
            {
                double distance = 0;
                if (@object != EO.SUN)
                {
                    Lrad     = CT.D2R(L);
                    Brad     = CT.D2R(B);
                    cosB     = Math.Cos(Brad);
                    cosL     = Math.Cos(Lrad);
                    x        = R * cosB * cosL - R0 * cosB0 * Math.Cos(L0);
                    y        = R * cosB * Math.Sin(Lrad) - R0 * cosB0 * Math.Sin(L0);
                    z        = R * Math.Sin(Brad) - R0 * Math.Sin(B0);
                    distance = Math.Sqrt(x * x + y * y + z * z);
                }
                else
                {
                    distance = R; //Distance to the sun from the earth is in fact the radius vector
                }
                //Prepare for the next loop around
                JD0 = JD - ELL.DistanceToLightTime(distance);
            }
        }

        Lrad = CT.D2R(L);
        Brad = CT.D2R(B);
        cosB = Math.Cos(Brad);
        cosL = Math.Cos(Lrad);
        x    = R * cosB * cosL - R0 * cosB0 * Math.Cos(L0);
        y    = R * cosB * Math.Sin(Lrad) - R0 * cosB0 * Math.Sin(L0);
        z    = R * Math.Sin(Brad) - R0 * Math.Sin(B0);
        double x2 = x * x;
        double y2 = y * y;

        details.ApparentGeocentricLatitude  = CT.R2D(Math.Atan2(z, Math.Sqrt(x2 + y2)));
        details.ApparentGeocentricDistance  = Math.Sqrt(x2 + y2 + z * z);
        details.ApparentGeocentricLongitude = CT.M360(CT.R2D(Math.Atan2(y, x)));
        details.ApparentLightTime           = ELL.DistanceToLightTime(details.ApparentGeocentricDistance);

        //Adjust for Aberration
        COR Aberration = ABR.EclipticAberration(details.ApparentGeocentricLongitude, details.ApparentGeocentricLatitude, JD);

        details.ApparentGeocentricLongitude += Aberration.X;
        details.ApparentGeocentricLatitude  += Aberration.Y;

        //convert to the FK5 system
        double DeltaLong = CAAFK5.CorrectionInLongitude(details.ApparentGeocentricLongitude, details.ApparentGeocentricLatitude, JD);

        details.ApparentGeocentricLatitude  += CAAFK5.CorrectionInLatitude(details.ApparentGeocentricLongitude, JD);
        details.ApparentGeocentricLongitude += DeltaLong;

        //Correct for nutation
        double NutationInLongitude = CAANutation.NutationInLongitude(JD);
        double Epsilon             = CAANutation.TrueObliquityOfEcliptic(JD);

        details.ApparentGeocentricLongitude += CT.DMS2D(0, 0, NutationInLongitude);

        //Convert to RA and Dec
        COR ApparentEqu = CT.Ec2Eq(details.ApparentGeocentricLongitude, details.ApparentGeocentricLatitude, Epsilon);

        details.ApparentGeocentricRA          = ApparentEqu.X;
        details.ApparentGeocentricDeclination = ApparentEqu.Y;

        return(details);
    }
Exemplo n.º 3
0
    public static EPD Calculate(double JD, EO @object)
    {
        //What will the the return value
        EPD details = new EPD();

        double JD0 = JD;
        double L0 = 0;
        double B0 = 0;
        double R0 = 0;
        double cosB0 = 0;
        if (@object != EO.SUN)
        {
          L0 = CAAEarth.EclipticLongitude(JD0);
          B0 = CAAEarth.EclipticLatitude(JD0);
          R0 = CAAEarth.RadiusVector(JD0);
          L0 = CT.D2R(L0);
          B0 = CT.D2R(B0);
          cosB0 = Math.Cos(B0);
        }

        //Calculate the initial values
        double L = 0;
        double B = 0;
        double R = 0;

        double Lrad;
        double Brad;
        double cosB;
        double cosL;
        double x;
        double y;
        double z;
        bool bRecalc = true;
        bool bFirstRecalc = true;
        double LPrevious = 0;
        double BPrevious = 0;
        double RPrevious = 0;
        while (bRecalc)
        {
          switch (@object)
          {
        case EO.SUN:
        {
          L = CAASun.GeometricEclipticLongitude(JD0);
          B = CAASun.GeometricEclipticLatitude(JD0);
          R = CAAEarth.RadiusVector(JD0);
          break;
        }
        case EO.MERCURY:
        {
          L = CAAMercury.EclipticLongitude(JD0);
          B = CAAMercury.EclipticLatitude(JD0);
          R = CAAMercury.RadiusVector(JD0);
          break;
        }
        case EO.VENUS:
        {
          L = CAAVenus.EclipticLongitude(JD0);
          B = CAAVenus.EclipticLatitude(JD0);
          R = CAAVenus.RadiusVector(JD0);
          break;
        }
        case EO.MARS:
        {
          L = CAAMars.EclipticLongitude(JD0);
          B = CAAMars.EclipticLatitude(JD0);
          R = CAAMars.RadiusVector(JD0);
          break;
        }
        case EO.JUPITER:
        {
          L = CAAJupiter.EclipticLongitude(JD0);
          B = CAAJupiter.EclipticLatitude(JD0);
          R = CAAJupiter.RadiusVector(JD0);
          break;
        }
        case EO.SATURN:
        {
          L = CAASaturn.EclipticLongitude(JD0);
          B = CAASaturn.EclipticLatitude(JD0);
          R = CAASaturn.RadiusVector(JD0);
          break;
        }
        case EO.URANUS:
        {
          L = CAAUranus.EclipticLongitude(JD0);
          B = CAAUranus.EclipticLatitude(JD0);
          R = CAAUranus.RadiusVector(JD0);
          break;
        }
        case EO.NEPTUNE:
        {
          L = CAANeptune.EclipticLongitude(JD0);
          B = CAANeptune.EclipticLatitude(JD0);
          R = CAANeptune.RadiusVector(JD0);
          break;
        }
        case EO.PLUTO:
        {
          L = CAAPluto.EclipticLongitude(JD0);
          B = CAAPluto.EclipticLatitude(JD0);
          R = CAAPluto.RadiusVector(JD0);
          break;
        }
        default:
        {
          Debug.Assert(false);
          break;
        }
          }

          if (!bFirstRecalc)
          {
        bRecalc = ((Math.Abs(L - LPrevious) > 0.00001) || (Math.Abs(B - BPrevious) > 0.00001) || (Math.Abs(R - RPrevious) > 0.000001));
        LPrevious = L;
        BPrevious = B;
        RPrevious = R;
          }
          else
        bFirstRecalc = false;

          //Calculate the new value
          if (bRecalc)
          {
        double distance = 0;
        if (@object != EO.SUN)
        {
          Lrad = CT.D2R(L);
          Brad = CT.D2R(B);
          cosB = Math.Cos(Brad);
          cosL = Math.Cos(Lrad);
          x = R * cosB * cosL - R0 * cosB0 * Math.Cos(L0);
          y = R * cosB * Math.Sin(Lrad) - R0 * cosB0 * Math.Sin(L0);
          z = R * Math.Sin(Brad) - R0 * Math.Sin(B0);
          distance = Math.Sqrt(x *x + y *y + z *z);
        }
        else
          distance = R; //Distance to the sun from the earth is in fact the radius vector

        //Prepare for the next loop around
        JD0 = JD - ELL.DistanceToLightTime(distance);
          }
        }

        Lrad = CT.D2R(L);
        Brad = CT.D2R(B);
        cosB = Math.Cos(Brad);
        cosL = Math.Cos(Lrad);
        x = R * cosB * cosL - R0 * cosB0 * Math.Cos(L0);
        y = R * cosB * Math.Sin(Lrad) - R0 * cosB0 * Math.Sin(L0);
        z = R * Math.Sin(Brad) - R0 * Math.Sin(B0);
        double x2 = x *x;
        double y2 = y *y;

        details.ApparentGeocentricLatitude = CT.R2D(Math.Atan2(z, Math.Sqrt(x2 + y2)));
        details.ApparentGeocentricDistance = Math.Sqrt(x2 + y2 + z *z);
        details.ApparentGeocentricLongitude = CT.M360(CT.R2D(Math.Atan2(y, x)));
        details.ApparentLightTime = ELL.DistanceToLightTime(details.ApparentGeocentricDistance);

        //Adjust for Aberration
        COR Aberration = ABR.EclipticAberration(details.ApparentGeocentricLongitude, details.ApparentGeocentricLatitude, JD);
        details.ApparentGeocentricLongitude += Aberration.X;
        details.ApparentGeocentricLatitude += Aberration.Y;

        //convert to the FK5 system
        double DeltaLong = CAAFK5.CorrectionInLongitude(details.ApparentGeocentricLongitude, details.ApparentGeocentricLatitude, JD);
        details.ApparentGeocentricLatitude += CAAFK5.CorrectionInLatitude(details.ApparentGeocentricLongitude, JD);
        details.ApparentGeocentricLongitude += DeltaLong;

        //Correct for nutation
        double NutationInLongitude = CAANutation.NutationInLongitude(JD);
        double Epsilon = CAANutation.TrueObliquityOfEcliptic(JD);
        details.ApparentGeocentricLongitude += CT.DMS2D(0, 0, NutationInLongitude);

        //Convert to RA and Dec
        COR ApparentEqu = CT.Ec2Eq(details.ApparentGeocentricLongitude, details.ApparentGeocentricLatitude, Epsilon);
        details.ApparentGeocentricRA = ApparentEqu.X;
        details.ApparentGeocentricDeclination = ApparentEqu.Y;

        return details;
    }
Exemplo n.º 4
0
        public static AstroRaDec GetPlanet(double jDate, EO planetIn, double locLat, double locLong, double locHeight)
        {
            int planet = (int)planetIn;
            //C++ TO C# CONVERTER NOTE: This static local variable declaration (not allowed in C#) has been moved just prior to the method:
            //			static CAAGalileanMoonsDetails galDetails;
            //C++ TO C# CONVERTER NOTE: This static local variable declaration (not allowed in C#) has been moved just prior to the method:
            //			static CAAEllipticalPlanetaryDetails jupDetails;
            //C++ TO C# CONVERTER NOTE: This static local variable declaration (not allowed in C#) has been moved just prior to the method:
            //			static CAAPhysicalJupiterDetails jupPhisical;
            //C++ TO C# CONVERTER NOTE: This static local variable declaration (not allowed in C#) has been moved just prior to the method:
            //			static double jDateLast = 0;

            locLong = -locLong;
            if (planet < 9)
            {
                EPD Details = ELL.Calculate(jDate, planetIn);
                COR corrected = CAAParallax.Equatorial2Topocentric(Details.ApparentGeocentricRA, Details.ApparentGeocentricDeclination, Details.ApparentGeocentricDistance, locLong, locLat, locHeight, jDate);
                return new AstroRaDec(corrected.X, corrected.Y, Details.ApparentGeocentricDistance, false, false);
            }
            else if (planet == 9)
            {
                double lat = CAAMoon.EclipticLatitude(jDate);
                double lng = CAAMoon.EclipticLongitude(jDate);
                double dis = CAAMoon.RadiusVector(jDate)/149598000;
                double epsilon = CAANutation.TrueObliquityOfEcliptic(jDate);
                COR d = CT.Ec2Eq(lng, lat, epsilon);
                COR corrected = CAAParallax.Equatorial2Topocentric(d.X, d.Y, dis, locLong, locLat, locHeight, jDate);

                return new AstroRaDec(corrected.X, corrected.Y, dis, false, false);

            }
            else
            {
                if (jDate != jDateLast)
                {
                    jupDetails = ELL.Calculate(jDate, (EO) 4);
                    jupPhisical = CAAPhysicalJupiter.Calculate(jDate);
                    COR corrected = CAAParallax.Equatorial2Topocentric(jupDetails.ApparentGeocentricRA, jupDetails.ApparentGeocentricDeclination, jupDetails.ApparentGeocentricDistance, locLong, locLat, locHeight, jDate);
                    jupDetails.ApparentGeocentricRA = corrected.X;
                    jupDetails.ApparentGeocentricDeclination = corrected.Y;
                    galDetails = GM.Calculate(jDate);
                    jDateLast = jDate;
                }

                double jupiterDiameter = 0.000954501;
                double scale = (Math.Atan(.5 * (jupiterDiameter / jupDetails.ApparentGeocentricDistance))) / 3.1415927 * 180;

                double raScale = (scale / Math.Cos(jupDetails.ApparentGeocentricDeclination / 180.0 * 3.1415927))/15;

                double xMoon=0;
                double yMoon=0;
                double zMoon=0;
                bool shadow = false;
                bool eclipsed = false;

                switch (planet)
                {
                    case 10: // IO
                        xMoon = galDetails.Satellite1.ApparentRectangularCoordinates.X;
                        yMoon = galDetails.Satellite1.ApparentRectangularCoordinates.Y;
                        zMoon = galDetails.Satellite1.ApparentRectangularCoordinates.Z;
                        eclipsed = galDetails.Satellite1.bInEclipse;
                        shadow = galDetails.Satellite1.bInShadowTransit;
                        break;
                    case 11: //Europa
                        xMoon = galDetails.Satellite2.ApparentRectangularCoordinates.X;
                        yMoon = galDetails.Satellite2.ApparentRectangularCoordinates.Y;
                        zMoon = galDetails.Satellite2.ApparentRectangularCoordinates.Z;
                        eclipsed = galDetails.Satellite2.bInEclipse;
                        shadow = galDetails.Satellite2.bInShadowTransit;
                        break;
                    case 12: //Ganymede
                        xMoon = galDetails.Satellite3.ApparentRectangularCoordinates.X;
                        yMoon = galDetails.Satellite3.ApparentRectangularCoordinates.Y;
                        zMoon = galDetails.Satellite3.ApparentRectangularCoordinates.Z;
                        eclipsed = galDetails.Satellite3.bInEclipse;
                        shadow = galDetails.Satellite3.bInShadowTransit;
                        break;
                    case 13: //Callisto
                        xMoon = galDetails.Satellite4.ApparentRectangularCoordinates.X;
                        yMoon = galDetails.Satellite4.ApparentRectangularCoordinates.Y;
                        zMoon = galDetails.Satellite4.ApparentRectangularCoordinates.Z;
                        eclipsed = galDetails.Satellite4.bInEclipse;
                        shadow = galDetails.Satellite4.bInShadowTransit;
                        break;
                    case 14: // IO Shadow
                        xMoon = galDetails.Satellite1.ApparentShadowRectangularCoordinates.X;
                        yMoon = galDetails.Satellite1.ApparentShadowRectangularCoordinates.Y;
                        zMoon = galDetails.Satellite1.ApparentShadowRectangularCoordinates.Z*.9;
                        shadow = galDetails.Satellite1.bInShadowTransit;
                        break;
                    case 15: //Europa Shadow
                        xMoon = galDetails.Satellite2.ApparentShadowRectangularCoordinates.X;
                        yMoon = galDetails.Satellite2.ApparentShadowRectangularCoordinates.Y;
                        zMoon = galDetails.Satellite2.ApparentShadowRectangularCoordinates.Z*.9;
                        shadow = galDetails.Satellite2.bInShadowTransit;
                        break;
                    case 16: //Ganymede Shadow
                        xMoon = galDetails.Satellite3.ApparentShadowRectangularCoordinates.X;
                        yMoon = galDetails.Satellite3.ApparentShadowRectangularCoordinates.Y;
                        zMoon = galDetails.Satellite3.ApparentShadowRectangularCoordinates.Z*.9;
                        shadow = galDetails.Satellite3.bInShadowTransit;
                        break;
                    case 17: //Callisto Shadow
                        xMoon = galDetails.Satellite4.ApparentShadowRectangularCoordinates.X;
                        yMoon = galDetails.Satellite4.ApparentShadowRectangularCoordinates.Y;
                        zMoon = galDetails.Satellite4.ApparentShadowRectangularCoordinates.Z*.9;
                        shadow = galDetails.Satellite4.bInShadowTransit;
                        break;
                }

                double xTemp;
                double yTemp;
                double radians = jupPhisical.P /180.0 * 3.1415927;
                xTemp = xMoon * Math.Cos(radians) - yMoon * Math.Sin(radians);
                yTemp = xMoon * Math.Sin(radians) + yMoon * Math.Cos(radians);
                xMoon = xTemp;
                yMoon = yTemp;

                return new AstroRaDec(jupDetails.ApparentGeocentricRA - (xMoon * raScale), jupDetails.ApparentGeocentricDeclination + yMoon * scale, jupDetails.ApparentGeocentricDistance + (zMoon *jupiterDiameter/2), shadow, eclipsed);

            }
        }