/// <summary> /// Convert equator to ecliptic(J2000.0). /// </summary> /// <param name="e">Ecliptic coordinates.</param> /// <param name="time">Local time(It is used to calculate the ecliptic obliquity).</param> /// <param name="isApparent">Is it the apparent ecliptic coordinates.</param> /// <returns>Equator coordinates.</returns> public static Equator Ecliptic2Equator(Ecliptic e, DateTime time, bool isApparent) { double lambda = e.Longitude; double beta = e.Latitude; double epsilon; if (isApparent) { epsilon = GetEclipticObliquity(time); } else { epsilon = GetEclipticObliquity(time, false); } double tanA1 = Math.Sin(lambda * (Math.PI / 180.0)) * Math.Cos(epsilon * (Math.PI / 180.0)) - Math.Tan(beta * (Math.PI / 180.0)) * Math.Sin(epsilon * (Math.PI / 180.0)); double tanA2 = Math.Cos(lambda * (Math.PI / 180.0)); double sinD = Math.Sin(beta * (Math.PI / 180.0)) * Math.Cos(epsilon * (Math.PI / 180.0)) + Math.Cos(beta * (Math.PI / 180.0)) * Math.Sin(epsilon * (Math.PI / 180.0)) * Math.Sin(lambda * (Math.PI / 180.0)); double ra = Math.Atan2(tanA1, tanA2) * (180.0 / Math.PI); double dec = Math.Asin(sinD) * (180.0 / Math.PI); if (ra < 0) { ra = 360 + ra; } return(new Equator() { RA = ra, Dec = dec }); }
public IActionResult Index() { DateTime birthday = new DateTime(1991, 6, 5, 8, 26, 00); Equator equator = Sun.EquatorialCoordinate(birthday); Ecliptic mooquator = Moon.EclipticalCoordinate(birthday); Ecliptic merquator = Mercury.EclipticalCoordinate(birthday); Ecliptic vequator = Venus.EclipticalCoordinate(birthday); Ecliptic mequator = Mars.EclipticalCoordinate(birthday); Ecliptic jequator = Jupiter.EclipticalCoordinate(birthday); Ecliptic sequator = Saturn.EclipticalCoordinate(birthday); Ecliptic urquator = Uranus.EclipticalCoordinate(birthday); Ecliptic nequator = Neptune.EclipticalCoordinate(DateTime.Now); Ecliptic ecliptic = CoordinateSystem.Equatorial2Ecliptic(equator); Debug.WriteLine(DateTime.Now); Debug.WriteLine("SUN" + ecliptic.Longitude); Debug.WriteLine("Moon" + mooquator.Longitude); Debug.WriteLine("MERC: " + merquator.Longitude); Debug.WriteLine("VENUS" + vequator.Longitude); Debug.WriteLine("Mars" + mequator.Longitude); Debug.WriteLine("Jup: " + jequator.Longitude); Debug.WriteLine("Saturn: " + sequator.Longitude); Debug.WriteLine("Urnuas: " + urquator.Longitude); Debug.WriteLine("Neptune: " + nequator.Longitude); return(View()); }
///SETZOD Sets zodiac sign, SETDATA sets ecliptic coordinates! public void SetData() { Equator equator = Sun.EquatorialCoordinate(BirthDate); Ecliptic ecliptic = CoordinateSystem.Equatorial2Ecliptic(equator); UserSun = ecliptic.Longitude; }
/// <summary> /// Convert ecliptic to equator(J2000.0). /// </summary> /// <param name="e">Ecliptic coordinates.</param> /// <returns>Equator coordinates.</returns> public static Equator Ecliptic2Equator(Ecliptic e) { double lambda = e.Longitude; double beta = e.Latitude; double epsilon = 23.439291; double tanA1 = Math.Sin(lambda * (Math.PI / 180.0)) * Math.Cos(epsilon * (Math.PI / 180.0)) - Math.Tan(beta * (Math.PI / 180.0)) * Math.Sin(epsilon * (Math.PI / 180.0)); double tanA2 = Math.Cos(lambda * (Math.PI / 180.0)); double sinD = Math.Sin(beta * (Math.PI / 180.0)) * Math.Cos(epsilon * (Math.PI / 180.0)) + Math.Cos(beta * (Math.PI / 180.0)) * Math.Sin(epsilon * (Math.PI / 180.0)) * Math.Sin(lambda * (Math.PI / 180.0)); double ra = Math.Atan2(tanA1, tanA2) * (180.0 / Math.PI); double dec = Math.Asin(sinD) * (180.0 / Math.PI); if (ra < 0) { ra = 360 + ra; } return(new Equator() { RA = ra, Dec = dec }); }
/// <summary> /// Calculates the geocentric ecliptic coordinates of <see cref="Moon"/> at a specified time. /// </summary> /// <param name="time">Local time.</param> /// <param name="isApparent">Is it the apparent ecliptic coordinates.</param> /// <returns>Geocentric ecliptic coordinates.</returns> public Ecliptic GetEclipticCoordinate(DateTime time, bool isApparent = false) { double T = (Julian.ToJulianDay(time) - 2451545) / 36525.0; // 月球平黄经 double L1 = 218.3164591 + 481267.88134236 * T - 0.0013268 * T * T + T * T * T / 538841.0 - T * T * T * T / 65194000; // 月日距离 double D = 297.8502042 + 445267.1115168 * T - 0.0016300 * T * T + T * T * T / 545868.0 - T * T * T * T / 113065000.0; // 太阳平近点角 double M = 357.5291092 + 35999.0502909 * T - 0.0001536 * T * T + T * T * T / 24490000.0; // 月球平近点角 double M1 = 134.9634114 + 477198.8676313 * T + 0.0089970 * T * T + T * T * T / 69699.0 - T * T * T * T / 14712000.0; // 月球精度参数 double F = 93.2720993 + 483202.0175273 * T - 0.0034029 * T * T - T * T * T / 3526000.0 + T * T * T * T / 863310000.0; // 修正参数 double A1 = 119.75 + 131.849 * T; double A2 = 53.09 + 479264.290 * T; double A3 = 313.45 + 481266.484 * T; double E = 1 - 0.002516 * T - 0.0000074 * T * T; #region 化简 if (L1 <= 0) { while (!(L1 >= 0 && L1 <= 360)) { L1 += 360; } } else { while (!(L1 >= 0 && L1 <= 360)) { L1 -= 360; } } if (D <= 0) { while (!(D >= 0 && D <= 360)) { D += 360; } } else { while (!(D >= 0 && D <= 360)) { D -= 360; } } if (M <= 0) { while (!(M >= 0 && M <= 360)) { M += 360; } } else { while (!(M >= 0 && M <= 360)) { M -= 360; } } if (M1 <= 0) { while (!(M1 >= 0 && M1 <= 360)) { M1 += 360; } } else { while (!(M1 >= 0 && M1 <= 360)) { M1 -= 360; } } if (F <= 0) { while (!(F >= 0 && F <= 360)) { F += 360; } } else { while (!(F >= 0 && F <= 360)) { F -= 360; } } if (A1 <= 0) { while (!(A1 >= 0 && A1 <= 360)) { A1 += 360; } } else { while (!(A1 >= 0 && A1 <= 360)) { A1 -= 360; } } if (A2 <= 0) { while (!(A2 >= 0 && A2 <= 360)) { A2 += 360; } } else { while (!(A2 >= 0 && A2 <= 360)) { A2 -= 360; } } if (A3 <= 0) { while (!(A3 >= 0 && A3 <= 360)) { A3 += 360; } } else { while (!(A3 >= 0 && A3 <= 360)) { A3 -= 360; } } #endregion #region SigmaI double SigmaI = 6288744 * Math.Sin(M1 * (Math.PI / 180.0)) + 1274027 * Math.Sin((2 * D - M1) * (Math.PI / 180.0)) + 658314 * Math.Sin((2 * D) * (Math.PI / 180.0)) + 213618 * Math.Sin((2 * M1) * (Math.PI / 180.0)) - 185116 * E * Math.Sin(M * (Math.PI / 180.0)) - 114332 * Math.Sin((2 * F) * (Math.PI / 180.0)) + 58793 * Math.Sin((2 * D - 2 * M1) * (Math.PI / 180.0)) + 57066 * E * Math.Sin((2 * D - M - M1) * (Math.PI / 180.0)) + 53322 * Math.Sin((2 * D + M1) * (Math.PI / 180.0)) + 45758 * E * Math.Sin((2 * D - M) * (Math.PI / 180.0)) - 40923 * E * Math.Sin((M - M1) * (Math.PI / 180.0)) - 34720 * Math.Sin(D * (Math.PI / 180.0)) - 30383 * E * Math.Sin((M + M1) * (Math.PI / 180.0)) + 15327 * Math.Sin((2 * D - 2 * F) * (Math.PI / 180.0)) - 12528 * Math.Sin((M1 + 2 * F) * (Math.PI / 180.0)) + 10980 * Math.Sin((M1 - 2 * F) * (Math.PI / 180.0)) + 10675 * Math.Sin((4 * D - M1) * (Math.PI / 180.0)) + 10034 * Math.Sin((3 * M1) * (Math.PI / 180.0)) + 8548 * Math.Sin((4 * D - 2 * M1) * (Math.PI / 180.0)) - 7888 * E * Math.Sin((2 * D + M - M1) * (Math.PI / 180.0)) - 6766 * E * Math.Sin((2 * D + M) * (Math.PI / 180.0)) - 5163 * Math.Sin((D - M1) * (Math.PI / 180.0)) + 4987 * E * Math.Sin((D + M) * (Math.PI / 180.0)) + 4036 * E * Math.Sin((2 * D - M + M1) * (Math.PI / 180.0)) + 3994 * Math.Sin((2 * D + 2 * M1) * (Math.PI / 180.0)) + 3861 * Math.Sin((4 * D) * (Math.PI / 180.0)) + 3665 * Math.Sin((2 * D - 3 * M1) * (Math.PI / 180.0)) - 2689 * E * Math.Sin((M - 2 * M1) * (Math.PI / 180.0)) - 2602 * Math.Sin((2 * D - M1 + 2 * F) * (Math.PI / 180.0)) + 2390 * E * Math.Sin((2 * D - M - 2 * M1) * (Math.PI / 180.0)) - 2348 * Math.Sin((D + M1) * (Math.PI / 180.0)) + 2236 * E * E * Math.Sin((2 * D - 2 * M) * (Math.PI / 180.0)) - 2120 * E * Math.Sin((M + 2 * M1) * (Math.PI / 180.0)) - 2069 * E * E * Math.Sin((2 * M) * (Math.PI / 180.0)) + 2048 * E * E * Math.Sin((2 * D - 2 * M - M1) * (Math.PI / 180.0)) - 1773 * Math.Sin((2 * D + M1 - 2 * F) * (Math.PI / 180.0)) - 1595 * Math.Sin((2 * D + 2 * F) * (Math.PI / 180.0)) + 1215 * E * Math.Sin((4 * D - M - M1) * (Math.PI / 180.0)) - 1110 * Math.Sin((2 * M1 + 2 * F) * (Math.PI / 180.0)) - 892 * Math.Sin((3 * D - M1) * (Math.PI / 180.0)) - 810 * E * Math.Sin((2 * D + M + M1) * (Math.PI / 180.0)) + 759 * E * Math.Sin((4 * D - M - 2 * M1) * (Math.PI / 180.0)) - 713 * E * Math.Sin((2 * M - M1) * (Math.PI / 180.0)) - 700 * E * Math.Sin((2 * D + 2 * M - M1) * (Math.PI / 180.0)) + 691 * E * Math.Sin((2 * D + M - 2 * M1) * (Math.PI / 180.0)) + 596 * E * Math.Sin((2 * D - M - 2 * F) * (Math.PI / 180.0)) + 549 * Math.Sin((4 * D + M1) * (Math.PI / 180.0)) + 537 * Math.Sin((4 * M1) * (Math.PI / 180.0)) + 520 * E * Math.Sin((4 * D - M) * (Math.PI / 180.0)) - 487 * Math.Sin((D - 2 * M1) * (Math.PI / 180.0)) - 399 * E * Math.Sin((2 * D + M - 2 * F) * (Math.PI / 180.0)) - 381 * Math.Sin((2 * M1 - 2 * F) * (Math.PI / 180.0)) + 351 * E * Math.Sin((D + M + M1) * (Math.PI / 180.0)) - 340 * Math.Sin((3 * D - 2 * M1) * (Math.PI / 180.0)) + 330 * Math.Sin((4 * D - 3 * M1) * (Math.PI / 180.0)) + 327 * E * Math.Sin((2 * D - M + 2 * M1) * (Math.PI / 180.0)) - 323 * E * Math.Sin((2 * M + M1) * (Math.PI / 180.0)) + 299 * E * Math.Sin((D + M - M1) * (Math.PI / 180.0)) + 294 * Math.Sin((2 * D + 3 * M1) * (Math.PI / 180.0)) + 0 * Math.Sin((2 * D - M1 - 2 * F) * (Math.PI / 180.0)) + (3958 * Math.Sin(A1 * (Math.PI / 180.0)) + 1962 * Math.Sin((L1 - F) * (Math.PI / 180.0)) + 318 * Math.Sin(A2 * (Math.PI / 180.0))); #endregion #region SigmaB double SigmaB = 5128122 * Math.Sin(F * (Math.PI / 180.0)) + 280602 * Math.Sin((M1 + F) * (Math.PI / 180.0)) + 277693 * Math.Sin((M1 - F) * (Math.PI / 180.0)) + 173237 * Math.Sin((2 * D - F) * (Math.PI / 180.0)) + 55413 * Math.Sin((2 * D - M1 + F) * (Math.PI / 180.0)) + 46271 * Math.Sin((2 * D - M1 - F) * (Math.PI / 180.0)) + 32573 * Math.Sin((2 * D + F) * (Math.PI / 180.0)) + 17198 * Math.Sin((2 * M1 + F) * (Math.PI / 180.0)) + 9266 * Math.Sin((2 * D + M1 - F) * (Math.PI / 180.0)) + 8822 * Math.Sin((2 * M1 - F) * (Math.PI / 180.0)) + 8216 * E * Math.Sin((2 * D - M - F) * (Math.PI / 180.0)) + 4324 * Math.Sin((2 * D - 2 * M1 - F) * (Math.PI / 180.0)) + 4200 * Math.Sin((2 * D + M1 + F) * (Math.PI / 180.0)) - 3359 * E * Math.Sin((2 * D + M - F) * (Math.PI / 180.0)) + 2463 * E * Math.Sin((2 * D - M - M1 + F) * (Math.PI / 180.0)) + 2211 * E * Math.Sin((2 * D - M + F) * (Math.PI / 180.0)) + 2065 * E * Math.Sin((2 * D - M - M1 - F) * (Math.PI / 180.0)) - 1870 * E * Math.Sin((M - M1 - F) * (Math.PI / 180.0)) + 1828 * Math.Sin((4 * D - M1 - F) * (Math.PI / 180.0)) - 1794 * E * Math.Sin((M + F) * (Math.PI / 180.0)) - 1749 * Math.Sin((3 * F) * (Math.PI / 180.0)) - 1565 * E * Math.Sin((M - M1 + F) * (Math.PI / 180.0)) - 1491 * Math.Sin((D + F) * (Math.PI / 180.0)) - 1475 * E * Math.Sin((M + M1 + F) * (Math.PI / 180.0)) - 1410 * E * Math.Sin((M + M1 - F) * (Math.PI / 180.0)) - 1344 * E * Math.Sin((M - F) * (Math.PI / 180.0)) - 1335 * Math.Sin((D - F) * (Math.PI / 180.0)) + 1107 * Math.Sin((3 * M1 + F) * (Math.PI / 180.0)) + 1021 * Math.Sin((4 * D - F) * (Math.PI / 180.0)) + 833 * Math.Sin((4 * D - M1 + F) * (Math.PI / 180.0)) + 777 * Math.Sin((M1 - 3 * F) * (Math.PI / 180.0)) + 671 * Math.Sin((4 * D - 2 * M1 + F) * (Math.PI / 180.0)) + 607 * Math.Sin((2 * D - 3 * F) * (Math.PI / 180.0)) + 596 * Math.Sin((2 * D + 2 * M1 - F) * (Math.PI / 180.0)) + 491 * E * Math.Sin((2 * D - M + M1 - F) * (Math.PI / 180.0)) - 451 * Math.Sin((2 * D - 2 * M1 + F) * (Math.PI / 180.0)) + 439 * Math.Sin((3 * M1 - F) * (Math.PI / 180.0)) + 422 * Math.Sin((2 * D + 2 * M1 + F) * (Math.PI / 180.0)) + 421 * Math.Sin((2 * D - 3 * M1 - F) * (Math.PI / 180.0)) - 366 * E * Math.Sin((2 * D + M - M1 + F) * (Math.PI / 180.0)) - 351 * E * Math.Sin((2 * D + M + F) * (Math.PI / 180.0)) + 331 * Math.Sin((4 * D + F) * (Math.PI / 180.0)) + 315 * E * Math.Sin((2 * D - M + M1 + F) * (Math.PI / 180.0)) + 302 * E * E * Math.Sin((2 * D - 2 * M - F) * (Math.PI / 180.0)) - 283 * Math.Sin((M1 + 3 * F) * (Math.PI / 180.0)) - 229 * E * Math.Sin((2 * D + M + M1 - F) * (Math.PI / 180.0)) + 223 * E * Math.Sin((D + M - F) * (Math.PI / 180.0)) + 223 * E * Math.Sin((D + M + F) * (Math.PI / 180.0)) - 220 * E * Math.Sin((M - 2 * M1 - F) * (Math.PI / 180.0)) - 220 * E * Math.Sin((2 * D + M - M1 - F) * (Math.PI / 180.0)) - 185 * Math.Sin((D + M1 + F) * (Math.PI / 180.0)) + 181 * E * Math.Sin((2 * D - M - 2 * M1 - F) * (Math.PI / 180.0)) - 177 * E * Math.Sin((M + 2 * M1 + F) * (Math.PI / 180.0)) + 176 * Math.Sin((4 * D - 2 * M1 - F) * (Math.PI / 180.0)) + 166 * E * Math.Sin((4 * D - M - M1 - F) * (Math.PI / 180.0)) - 164 * Math.Sin((D + M1 - F) * (Math.PI / 180.0)) + 132 * Math.Sin((4 * D + M1 - F) * (Math.PI / 180.0)) - 119 * Math.Sin((D - M1 - F) * (Math.PI / 180.0)) + 115 * E * Math.Sin((4 * D - M - F) * (Math.PI / 180.0)) + 107 * E * E * Math.Sin((2 * D - 2 * M + F) * (Math.PI / 180.0)) + (-2235 * Math.Sin(L1 * (Math.PI / 180.0)) + 382 * Math.Sin(A3 * (Math.PI / 180.0)) + 175 * Math.Sin((A1 - F) * (Math.PI / 180.0)) + 175 * Math.Sin((A1 + F) * (Math.PI / 180.0)) + 127 * Math.Sin((L1 - M1) * (Math.PI / 180.0)) - 115 * Math.Sin((L1 + M1) * (Math.PI / 180.0))); #endregion Ecliptic e; if (!isApparent) { double longitude = L1 + SigmaI / 1000000.0; double latitude = SigmaB / 1000000.0; if (longitude < 0) { longitude = 360 + longitude; } e = new Ecliptic() { Longitude = longitude, Latitude = latitude }; } else { var n = CoordinateSystem.GetNutation(time); double longitude = (L1 + SigmaI / 1000000.0) + n.Longitude; double latitude = SigmaB / 1000000.0; if (longitude < 0) { longitude = 360 + longitude; } e = new Ecliptic() { Longitude = longitude, Latitude = latitude }; } return(e); }
public void SetNeptuneData() { Ecliptic nepquator = Neptune.EclipticalCoordinate(BirthDate); UserNeptune = nepquator.Longitude; }
public void SetUranusData() { Ecliptic urquator = Uranus.EclipticalCoordinate(BirthDate); UserUranus = urquator.Longitude; }
public void SetSaturnData() { Ecliptic satquator = Saturn.EclipticalCoordinate(BirthDate); UserSaturn = satquator.Longitude; }
public void SetJupiterData() { Ecliptic jupquator = Jupiter.EclipticalCoordinate(BirthDate); UserJupiter = jupquator.Longitude; }
public void SetMarsData() { Ecliptic marsquator = Mars.EclipticalCoordinate(BirthDate); UserMars = marsquator.Longitude; }
public void SetVenusData() { Ecliptic vequator = Venus.EclipticalCoordinate(BirthDate); UserVenus = vequator.Longitude; }
public void SetMercData() { Ecliptic mercquator = Mercury.EclipticalCoordinate(BirthDate); UserMerc = mercquator.Longitude; }
public void SetMoonData() { Ecliptic moonquator = Moon.EclipticalCoordinate(BirthDate); UserMoon = moonquator.Longitude; }