Exemple #1
0
        public static AASSelenographicMoonDetails CalculateSelenographicPositionOfSun(double JD, bool bHighPrecision)
        {
            double R       = AASEarth.RadiusVector(JD, bHighPrecision) * 149597970;
            double Delta   = AASMoon.RadiusVector(JD);
            double lambda0 = AASSun.ApparentEclipticLongitude(JD, bHighPrecision);
            double lambda  = AASMoon.EclipticLongitude(JD);
            double beta    = AASMoon.EclipticLatitude(JD);

            double lambdah = AASCoordinateTransformation.MapTo0To360Range(lambda0 + 180 + Delta / R * 57.296 * Math.Cos(AASCoordinateTransformation.DegreesToRadians(beta)) * Math.Sin(AASCoordinateTransformation.DegreesToRadians(lambda0 - lambda)));
            double betah   = Delta / R * beta;

            //What will be the return value
            AASSelenographicMoonDetails details = new AASSelenographicMoonDetails();

            //Calculate the optical libration
            double omega   = 0;
            double DeltaU  = 0;
            double sigma   = 0;
            double I       = 0;
            double rho     = 0;
            double ldash0  = 0;
            double bdash0  = 0;
            double ldash20 = 0;
            double bdash20 = 0;
            double epsilon = 0;

            CalculateOpticalLibration(JD, lambdah, betah, ref ldash0, ref bdash0, ref ldash20, ref bdash20, ref epsilon, ref omega, ref DeltaU, ref sigma, ref I, ref rho);

            details.l0 = ldash0 + ldash20;
            details.b0 = bdash0 + bdash20;
            details.c0 = AASCoordinateTransformation.MapTo0To360Range(450 - details.l0);
            return(details);
        }
Exemple #2
0
        public static double SpringEquinox(long Year)
        {
            //calculate the approximate date
            double JDE;

            if (Year <= 1000)
            {
                double Y        = Year / 1000.0;
                double Ysquared = Y * Y;
                double Ycubed   = Ysquared * Y;
                double Y4       = Ycubed * Y;
                JDE = 1721139.29189 + 365242.13740 * Y + 0.06134 * Ysquared + 0.00111 * Ycubed - 0.00071 * Y4;
            }
            else
            {
                double Y        = (Year - 2000) / 1000.0;
                double Ysquared = Y * Y;
                double Ycubed   = Ysquared * Y;
                double Y4       = Ycubed * Y;
                JDE = 2451623.80984 + 365242.37404 * Y + 0.05169 * Ysquared - 0.00411 * Ycubed - 0.00057 * Y4;
            }

            double Correction;

            do
            {
                double SunLongitude = AASSun.ApparentEclipticLongitude(JDE);
                Correction = 58 * Math.Sin(AASCoordinateTransformation.DegreesToRadians(-SunLongitude));
                JDE       += Correction;
            }while (Math.Abs(Correction) > 0.00001); //Corresponds to an error of 0.86 of a second

            return(JDE);
        }
Exemple #3
0
        public static double AutumnEquinox(long Year)
        {
            //calculate the approximate date
            double JDE;

            if (Year <= 1000)
            {
                double Y        = Year / 1000.0;
                double Ysquared = Y * Y;
                double Ycubed   = Ysquared * Y;
                double Y4       = Ycubed * Y;
                JDE = 1721325.70455 + 365242.49558 * Y - 0.11677 * Ysquared - 0.00297 * Ycubed + 0.00074 * Y4;
            }
            else
            {
                double Y        = (Year - 2000) / 1000.0;
                double Ysquared = Y * Y;
                double Ycubed   = Ysquared * Y;
                double Y4       = Ycubed * Y;
                JDE = 2451810.21715 + 365242.01767 * Y - 0.11575 * Ysquared + 0.00337 * Ycubed + 0.00078 * Y4;
            }

            double Correction;

            do
            {
                double SunLongitude = AASSun.ApparentEclipticLongitude(JDE);
                Correction = 58 * Math.Sin(AASCoordinateTransformation.DegreesToRadians(180 - SunLongitude));
                JDE       += Correction;
            }while (Math.Abs(Correction) > 0.00001); //Corresponds to an error of 0.86 of a second

            return(JDE);
        }
Exemple #4
0
        public static double SummerSolstice(long Year)
        {
            //calculate the approximate date
            double JDE;

            if (Year <= 1000)
            {
                double Y        = Year / 1000.0;
                double Ysquared = Y * Y;
                double Ycubed   = Ysquared * Y;
                double Y4       = Ycubed * Y;
                JDE = 1721233.25401 + 365241.72562 * Y - 0.05323 * Ysquared + 0.00907 * Ycubed + 0.00025 * Y4;
            }
            else
            {
                double Y        = (Year - 2000) / 1000.0;
                double Ysquared = Y * Y;
                double Ycubed   = Ysquared * Y;
                double Y4       = Ycubed * Y;
                JDE = 2451716.56767 + 365241.62603 * Y + 0.00325 * Ysquared + 0.00888 * Ycubed - 0.00030 * Y4;
            }

            double Correction;

            do
            {
                double SunLongitude = AASSun.ApparentEclipticLongitude(JDE);
                Correction = 58 * Math.Sin(AASCoordinateTransformation.DegreesToRadians(90 - SunLongitude));
                JDE       += Correction;
            }while (Math.Abs(Correction) > 0.00001); //Corresponds to an error of 0.86 of a second

            return(JDE);
        }
Exemple #5
0
        public static double WinterSolstice(long Year)
        {
            //calculate the approximate date
            double JDE;

            if (Year <= 1000)
            {
                double Y        = Year / 1000.0;
                double Ysquared = Y * Y;
                double Ycubed   = Ysquared * Y;
                double Y4       = Ycubed * Y;
                JDE = 1721414.39987 + 365242.88257 * Y - 0.00769 * Ysquared - 0.00933 * Ycubed - 0.00006 * Y4;
            }
            else
            {
                double Y        = (Year - 2000) / 1000.0;
                double Ysquared = Y * Y;
                double Ycubed   = Ysquared * Y;
                double Y4       = Ycubed * Y;
                JDE = 2451900.05952 + 365242.74049 * Y - 0.06223 * Ysquared - 0.00823 * Ycubed + 0.00032 * Y4;
            }

            double Correction;

            do
            {
                double SunLongitude = AASSun.ApparentEclipticLongitude(JDE);
                Correction = 58 * Math.Sin(AASCoordinateTransformation.DegreesToRadians(270 - SunLongitude));
                JDE       += Correction;
            }while (Math.Abs(Correction) > 0.00001); //Corresponds to an error of 0.86 of a second

            return(JDE);
        }
        public static double Calculate(double JD)
        {
            double rho        = (JD - 2451545) / 365250;
            double rhosquared = rho * rho;
            double rhocubed   = rhosquared * rho;
            double rho4       = rhocubed * rho;
            double rho5       = rho4 * rho;

            //Calculate the Suns mean longitude
            double L0 = AASCoordinateTransformation.MapTo0To360Range(280.4664567 + 360007.6982779 * rho + 0.03032028 * rhosquared +
                                                                     rhocubed / 49931 - rho4 / 15300 - rho5 / 2000000);

            //Calculate the Suns apparent right ascension
            double          SunLong    = AASSun.ApparentEclipticLongitude(JD);
            double          SunLat     = AASSun.ApparentEclipticLatitude(JD);
            double          epsilon    = AASNutation.TrueObliquityOfEcliptic(JD);
            AAS2DCoordinate Equatorial = AASCoordinateTransformation.Ecliptic2Equatorial(SunLong, SunLat, epsilon);

            epsilon = AASCoordinateTransformation.DegreesToRadians(epsilon);
            double E = L0 - 0.0057183 - Equatorial.X * 15 + AASCoordinateTransformation.DMSToDegrees(0, 0, AASNutation.NutationInLongitude(JD)) * Math.Cos(epsilon);

            if (E > 180)
            {
                E = -(360 - E);
            }
            E *= 4; //Convert to minutes of time

            return(E);
        }