コード例 #1
0
    public static CAATopocentricEclipticDetails Ecliptic2Topocentric(double Lambda, double Beta, double Semidiameter, double Distance, double Epsilon, double Longitude, double Latitude, double Height, double JD)
    {
        double S = CAAGlobe.RhoSinThetaPrime(Latitude, Height);
        double C = CAAGlobe.RhoCosThetaPrime(Latitude, Height);

        //Convert to radians
        Lambda       = CAACoordinateTransformation.DegreesToRadians(Lambda);
        Beta         = CAACoordinateTransformation.DegreesToRadians(Beta);
        Epsilon      = CAACoordinateTransformation.DegreesToRadians(Epsilon);
        Longitude    = CAACoordinateTransformation.DegreesToRadians(Longitude);
        Latitude     = CAACoordinateTransformation.DegreesToRadians(Latitude);
        Semidiameter = CAACoordinateTransformation.DegreesToRadians(Semidiameter);
        double sine    = Math.Sin(Epsilon);
        double cose    = Math.Cos(Epsilon);
        double cosBeta = Math.Cos(Beta);
        double sinBeta = Math.Sin(Beta);

        //Calculate the Sidereal time
        double theta = CAASidereal.ApparentGreenwichSiderealTime(JD);

        theta = CAACoordinateTransformation.HoursToRadians(theta);
        double sintheta = Math.Sin(theta);

        //Calculate the Parallax
        double pi    = Math.Asin(GlobalMembersStdafx.g_AAParallax_C1 / Distance);
        double sinpi = Math.Sin(pi);

        double N = Math.Cos(Lambda) * cosBeta - C * sinpi * Math.Cos(theta);

        CAATopocentricEclipticDetails Topocentric = new CAATopocentricEclipticDetails();

        Topocentric.Lambda = Math.Atan2(Math.Sin(Lambda) * cosBeta - sinpi * (S * sine + C * cose * sintheta), N);
        double cosTopocentricLambda = Math.Cos(Topocentric.Lambda);

        Topocentric.Beta         = Math.Atan(cosTopocentricLambda * (sinBeta - sinpi * (S * cose - C * sine * sintheta)) / N);
        Topocentric.Semidiameter = Math.Asin(cosTopocentricLambda * Math.Cos(Topocentric.Beta) * Math.Sin(Semidiameter) / N);

        //Convert back to degrees
        Topocentric.Semidiameter = CAACoordinateTransformation.RadiansToDegrees(Topocentric.Semidiameter);
        Topocentric.Lambda       = CAACoordinateTransformation.MapTo0To360Range(CAACoordinateTransformation.RadiansToDegrees(Topocentric.Lambda));
        Topocentric.Beta         = CAACoordinateTransformation.RadiansToDegrees(Topocentric.Beta);

        return(Topocentric);
    }
コード例 #2
0
    public static CAATopocentricEclipticDetails Ecliptic2Topocentric(double Lambda, double Beta, double Semidiameter, double Distance, double Epsilon, double Longitude, double Latitude, double Height, double JD)
    {
        var S = CAAGlobe.RhoSinThetaPrime(Latitude, Height);
          var C = CAAGlobe.RhoCosThetaPrime(Latitude, Height);

          //Convert to radians
          Lambda = CAACoordinateTransformation.DegreesToRadians(Lambda);
          Beta = CAACoordinateTransformation.DegreesToRadians(Beta);
          Epsilon = CAACoordinateTransformation.DegreesToRadians(Epsilon);
          Longitude = CAACoordinateTransformation.DegreesToRadians(Longitude);
          Latitude = CAACoordinateTransformation.DegreesToRadians(Latitude);
          Semidiameter = CAACoordinateTransformation.DegreesToRadians(Semidiameter);
          var sine = Math.Sin(Epsilon);
          var cose = Math.Cos(Epsilon);
          var cosBeta = Math.Cos(Beta);
          var sinBeta = Math.Sin(Beta);

          //Calculate the Sidereal time
          var theta = CAASidereal.ApparentGreenwichSiderealTime(JD);
          theta = CAACoordinateTransformation.HoursToRadians(theta);
          var sintheta = Math.Sin(theta);

          //Calculate the Parallax
          var pi = Math.Asin(GlobalMembersStdafx.g_AAParallax_C1 / Distance);
          var sinpi = Math.Sin(pi);

          var N = Math.Cos(Lambda)*cosBeta - C *sinpi *Math.Cos(theta);

          var Topocentric = new CAATopocentricEclipticDetails
          {
          Lambda = Math.Atan2(Math.Sin(Lambda)*cosBeta - sinpi*(S*sine + C*cose*sintheta), N)
          };
        var cosTopocentricLambda = Math.Cos(Topocentric.Lambda);
          Topocentric.Beta = Math.Atan(cosTopocentricLambda*(sinBeta - sinpi*(S *cose - C *sine *sintheta)) / N);
          Topocentric.Semidiameter = Math.Asin(cosTopocentricLambda *Math.Cos(Topocentric.Beta)*Math.Sin(Semidiameter) / N);

          //Convert back to degrees
          Topocentric.Semidiameter = CAACoordinateTransformation.RadiansToDegrees(Topocentric.Semidiameter);
          Topocentric.Lambda = CAACoordinateTransformation.MapTo0To360Range(CAACoordinateTransformation.RadiansToDegrees(Topocentric.Lambda));
          Topocentric.Beta = CAACoordinateTransformation.RadiansToDegrees(Topocentric.Beta);

        return Topocentric;
    }
コード例 #3
0
ファイル: AAParallax.cs プロジェクト: spamarti/wwt-web-client
    public static CAATopocentricEclipticDetails Ecliptic2Topocentric(double Lambda, double Beta, double Semidiameter, double Distance, double Epsilon, double Longitude, double Latitude, double Height, double JD)
    {
        double S = CAAGlobe.RhoSinThetaPrime(Latitude, Height);
          double C = CAAGlobe.RhoCosThetaPrime(Latitude, Height);

          //Convert to radians
          Lambda = CT.D2R(Lambda);
          Beta = CT.D2R(Beta);
          Epsilon = CT.D2R(Epsilon);
          Longitude = CT.D2R(Longitude);
          Latitude = CT.D2R(Latitude);
          Semidiameter = CT.D2R(Semidiameter);
          double sine = Math.Sin(Epsilon);
          double cose = Math.Cos(Epsilon);
          double cosBeta = Math.Cos(Beta);
          double sinBeta = Math.Sin(Beta);

          //Calculate the Sidereal time
          double theta = CAASidereal.ApparentGreenwichSiderealTime(JD);
          theta = CT.H2R(theta);
          double sintheta = Math.Sin(theta);

          //Calculate the Parallax
          double pi = Math.Asin(GFX.g_AAParallax_C1 / Distance);
          double sinpi = Math.Sin(pi);

          double N = Math.Cos(Lambda)*cosBeta - C *sinpi *Math.Cos(theta);

          CAATopocentricEclipticDetails Topocentric = new CAATopocentricEclipticDetails();
          Topocentric.Lambda = Math.Atan2(Math.Sin(Lambda)*cosBeta - sinpi*(S *sine + C *cose *sintheta), N);
          double cosTopocentricLambda = Math.Cos(Topocentric.Lambda);
          Topocentric.Beta = Math.Atan(cosTopocentricLambda*(sinBeta - sinpi*(S *cose - C *sine *sintheta)) / N);
          Topocentric.Semidiameter = Math.Asin(cosTopocentricLambda *Math.Cos(Topocentric.Beta)*Math.Sin(Semidiameter) / N);

          //Convert back to degrees
          Topocentric.Semidiameter = CT.R2D(Topocentric.Semidiameter);
          Topocentric.Lambda = CT.M360(CT.R2D(Topocentric.Lambda));
          Topocentric.Beta = CT.R2D(Topocentric.Beta);

        return Topocentric;
    }