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); }
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; }
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; }