Пример #1
0
    protected static CAAPhysicalMoonDetails CalculateHelper(double JD, ref double Lambda, ref double Beta, ref double epsilon, ref CAA2DCoordinate Equatorial)
    {
        //What will be the return value
        CAAPhysicalMoonDetails details = new CAAPhysicalMoonDetails();

        //Calculate the initial quantities
        Lambda = CAAMoon.EclipticLongitude(JD);
        Beta   = CAAMoon.EclipticLatitude(JD);

        //Calculate the optical libration
        double omega  = 0;
        double DeltaU = 0;
        double sigma  = 0;
        double I      = 0;
        double rho    = 0;

        CalculateOpticalLibration(JD, Lambda, Beta, ref details.ldash, ref details.bdash, ref details.ldash2, ref details.bdash2, ref epsilon, ref omega, ref DeltaU, ref sigma, ref I, ref rho);
        double epsilonrad = CAACoordinateTransformation.DegreesToRadians(epsilon);

        //Calculate the total libration
        details.l = details.ldash + details.ldash2;
        details.b = details.bdash + details.bdash2;
        double b = CAACoordinateTransformation.DegreesToRadians(details.b);

        //Calculate the position angle
        double V     = omega + DeltaU + CAACoordinateTransformation.DegreesToRadians(sigma) / Math.Sin(I);
        double I_rho = I + CAACoordinateTransformation.DegreesToRadians(rho);
        double X     = Math.Sin(I_rho) * Math.Sin(V);
        double Y     = Math.Sin(I_rho) * Math.Cos(V) * Math.Cos(epsilonrad) - Math.Cos(I_rho) * Math.Sin(epsilonrad);
        double w     = Math.Atan2(X, Y);

        Equatorial = CAACoordinateTransformation.Ecliptic2Equatorial(Lambda, Beta, epsilon);
        double Alpha = CAACoordinateTransformation.HoursToRadians(Equatorial.X);

        details.P = CAACoordinateTransformation.RadiansToDegrees(Math.Asin(Math.Sqrt(X * X + Y * Y) * Math.Cos(Alpha - w) / (Math.Cos(b))));

        return(details);
    }
Пример #2
0
    public static CAAPhysicalMoonDetails CalculateTopocentric(double JD, double Longitude, double Latitude)
    {
        //First convert to radians
        Longitude = CAACoordinateTransformation.DegreesToRadians(Longitude);
        Latitude  = CAACoordinateTransformation.DegreesToRadians(Latitude);

        double                 Lambda     = 0;
        double                 Beta       = 0;
        double                 epsilon    = 0;
        CAA2DCoordinate        Equatorial = new CAA2DCoordinate();
        CAAPhysicalMoonDetails details    = CalculateHelper(JD, ref Lambda, ref Beta, ref epsilon, ref Equatorial);

        double R     = CAAMoon.RadiusVector(JD);
        double pi    = CAAMoon.RadiusVectorToHorizontalParallax(R);
        double Alpha = CAACoordinateTransformation.HoursToRadians(Equatorial.X);
        double Delta = CAACoordinateTransformation.DegreesToRadians(Equatorial.Y);

        double AST = CAASidereal.ApparentGreenwichSiderealTime(JD);
        double H   = CAACoordinateTransformation.HoursToRadians(AST) - Longitude - Alpha;

        double Q      = Math.Atan2(Math.Cos(Latitude) * Math.Sin(H), Math.Cos(Delta) * Math.Sin(Latitude) - Math.Sin(Delta) * Math.Cos(Latitude) * Math.Cos(H));
        double Z      = Math.Acos(Math.Sin(Delta) * Math.Sin(Latitude) + Math.Cos(Delta) * Math.Cos(Latitude) * Math.Cos(H));
        double pidash = pi * (Math.Sin(Z) + 0.0084 * Math.Sin(2 * Z));

        double Prad = CAACoordinateTransformation.DegreesToRadians(details.P);

        double DeltaL = -pidash *Math.Sin(Q - Prad) / Math.Cos(CAACoordinateTransformation.DegreesToRadians(details.b));

        details.l += DeltaL;
        double DeltaB = pidash * Math.Cos(Q - Prad);

        details.b += DeltaB;
        details.P += DeltaL * Math.Sin(CAACoordinateTransformation.DegreesToRadians(details.b)) - pidash * Math.Sin(Q) * Math.Tan(Delta);

        return(details);
    }
Пример #3
0
    protected static CAAPhysicalMoonDetails CalculateHelper(double JD, ref double Lambda, ref double Beta, ref double epsilon, ref CAA2DCoordinate Equatorial)
    {
        //What will be the return value
        CAAPhysicalMoonDetails details = new CAAPhysicalMoonDetails();

        //Calculate the initial quantities
        Lambda = CAAMoon.EclipticLongitude(JD);
        Beta = CAAMoon.EclipticLatitude(JD);

        //Calculate the optical libration
        double omega=0;
        double DeltaU=0;
        double sigma=0;
        double I=0;
        double rho=0;
        CalculateOpticalLibration(JD, Lambda, Beta, ref details.ldash, ref details.bdash, ref details.ldash2, ref details.bdash2, ref epsilon, ref omega, ref DeltaU, ref sigma, ref I, ref rho);
        double epsilonrad = CAACoordinateTransformation.DegreesToRadians(epsilon);

        //Calculate the total libration
        details.l = details.ldash + details.ldash2;
        details.b = details.bdash + details.bdash2;
        double b = CAACoordinateTransformation.DegreesToRadians(details.b);

        //Calculate the position angle
        double V = omega + DeltaU + CAACoordinateTransformation.DegreesToRadians(sigma)/Math.Sin(I);
        double I_rho = I + CAACoordinateTransformation.DegreesToRadians(rho);
        double X = Math.Sin(I_rho)*Math.Sin(V);
        double Y = Math.Sin(I_rho)*Math.Cos(V)*Math.Cos(epsilonrad) - Math.Cos(I_rho)*Math.Sin(epsilonrad);
        double w = Math.Atan2(X, Y);

        Equatorial = CAACoordinateTransformation.Ecliptic2Equatorial(Lambda, Beta, epsilon);
        double Alpha = CAACoordinateTransformation.HoursToRadians(Equatorial.X);

        details.P = CAACoordinateTransformation.RadiansToDegrees(Math.Asin(Math.Sqrt(X *X + Y *Y)*Math.Cos(Alpha - w)/(Math.Cos(b))));

        return details;
    }