/// <summary> /// Gets equatorial coordinates of a star for current epoch /// </summary> public CrdsEquatorial Equatorial(SkyContext c, ushort hrNumber) { Star star = Stars.ElementAt(hrNumber - 1); PrecessionalElements p = c.Get(GetPrecessionalElements); double years = c.Get(YearsSince2000); // Initial coodinates for J2000 epoch CrdsEquatorial eq0 = new CrdsEquatorial(star.Equatorial0); // Take into account effect of proper motion: // now coordinates are for the mean equinox of J2000.0, // but for epoch of the target date eq0.Alpha += star.PmAlpha * years / 3600.0; eq0.Delta += star.PmDelta * years / 3600.0; // Equatorial coordinates for the mean equinox and epoch of the target date CrdsEquatorial eq = Precession.GetEquatorialCoordinates(eq0, p); // Nutation effect var eq1 = Nutation.NutationEffect(eq, c.NutationElements, c.Epsilon); // Aberration effect var eq2 = Aberration.AberrationEffect(eq, c.AberrationElements, c.Epsilon); // Apparent coordinates of the star eq += eq1 + eq2; return(eq); }
public override void Calculate(SkyContext context) { // precessional elements var p = Precession.ElementsFK5(Date.EPOCH_J2000, context.JulianDay); foreach (var ds in DeepSkies) { ds.Equatorial = context.Get(Equatorial, ds); ds.Horizontal = context.Get(Horizontal, ds); if (ds.Outline != null) { foreach (var op in ds.Outline) { CrdsEquatorial eq0 = new CrdsEquatorial(op.Equatorial0); // Equatorial coordinates for the mean equinox and epoch of the target date var eq = Precession.GetEquatorialCoordinates(eq0, p); // Nutation effect var eq1 = Nutation.NutationEffect(eq, context.NutationElements, context.Epsilon); // Aberration effect var eq2 = Aberration.AberrationEffect(eq, context.AberrationElements, context.Epsilon); // Apparent coordinates of the object eq += eq1 + eq2; // Apparent horizontal coordinates op.Horizontal = eq.ToHorizontal(context.GeoLocation, context.SiderealTime); } } } }
public void GetSolarCoordinatesLP() { double jde = 2448908.5; // get Earth coordinates CrdsHeliocentrical crds = PlanetPositions.GetPlanetCoordinates(Planet.Earth, jde, highPrecision: false); Assert.AreEqual(19.907372, crds.L, 1e-6); Assert.AreEqual(-0.644, crds.B * 3600, 1e-3); Assert.AreEqual(0.99760775, crds.R, 1e-8); // transform to ecliptical coordinates of the Sun CrdsEcliptical ecl = new CrdsEcliptical(Angle.To360(crds.L + 180), -crds.B, crds.R); // get FK5 system correction CrdsEcliptical corr = PlanetPositions.CorrectionForFK5(jde, ecl); Assert.AreEqual(-0.09033, corr.Lambda * 3600, 1e-5); Assert.AreEqual(-0.023, corr.Beta * 3600, 1e-3); // correct solar coordinates to FK5 system ecl += corr; Assert.AreEqual(199.907347, ecl.Lambda, 1e-6); Assert.AreEqual(0.62, ecl.Beta * 3600, 1e-2); Assert.AreEqual(0.99760775, ecl.Distance, 1e-8); var nutation = Nutation.NutationElements(jde); // True obliquity double epsilon = Date.TrueObliquity(jde, nutation.deltaEpsilon); // accuracy is 0.5" Assert.AreEqual(15.908, nutation.deltaPsi * 3600, 0.5); // accuracyis 0.1" Assert.AreEqual(-0.308, nutation.deltaEpsilon * 3600, 0.1); // accuracy is 0.1" Assert.AreEqual(23.4401443, epsilon, 0.1 / 3600.0); // add nutation effect ecl += Nutation.NutationEffect(nutation.deltaPsi); // calculate aberration effect CrdsEcliptical aberration = Aberration.AberrationEffect(ecl.Distance); Assert.AreEqual(-20.539, aberration.Lambda * 3600.0, 1e-3); // add aberration effect ecl += aberration; // convert ecliptical to equatorial coordinates CrdsEquatorial eq = ecl.ToEquatorial(epsilon); // check apparent equatorial coordinates // assume an accuracy of 0.5'' is sufficient Assert.AreEqual(198.378178, eq.Alpha, 1.0 / 3600 * 0.5); Assert.AreEqual(-7.783871, eq.Delta, 1.0 / 3600 * 0.5); }
/// <summary> /// Gets ecliptical coordinates of Sun /// </summary> public CrdsEcliptical Sun_Ecliptical(SkyContext c) { CrdsHeliocentrical hEarth = c.Get(Earth_Heliocentrial); var sunEcliptical = new CrdsEcliptical(Angle.To360(hEarth.L + 180), -hEarth.B, hEarth.R); // Corrected solar coordinates to FK5 system sunEcliptical += PlanetPositions.CorrectionForFK5(c.JulianDay, sunEcliptical); // Add nutation effect to ecliptical coordinates of the Sun sunEcliptical += Nutation.NutationEffect(c.NutationElements.deltaPsi); // Add aberration effect, so we have an final ecliptical coordinates of the Sun sunEcliptical += Aberration.AberrationEffect(sunEcliptical.Distance); return(sunEcliptical); }
/// <summary> /// Gets equatorial coordinates of deep sky object for current epoch /// </summary> private CrdsEquatorial Equatorial(SkyContext c, DeepSky ds) { PrecessionalElements p = c.Get(GetPrecessionalElements); // Equatorial coordinates for the mean equinox and epoch of the target date CrdsEquatorial eq = Precession.GetEquatorialCoordinates(ds.Equatorial0, p); // Nutation effect var eq1 = Nutation.NutationEffect(eq, c.NutationElements, c.Epsilon); // Aberration effect var eq2 = Aberration.AberrationEffect(eq, c.AberrationElements, c.Epsilon); // Apparent coordinates of the object eq += eq1 + eq2; return(eq); }
/// <summary> /// Gets apparent geocentrical ecliptical coordinates of the Sun /// </summary> private CrdsEcliptical SunEcliptical(SkyContext c) { // get Earth coordinates CrdsHeliocentrical hEarth = c.Get(EarthHeliocentrical); // transform to ecliptical coordinates of the Sun CrdsEcliptical sunEcliptical = new CrdsEcliptical(Angle.To360(hEarth.L + 180), -hEarth.B, hEarth.R); // correct solar coordinates to FK5 system sunEcliptical += PlanetPositions.CorrectionForFK5(c.JulianDay, sunEcliptical); // add nutation effect to ecliptical coordinates of the Sun sunEcliptical += Nutation.NutationEffect(c.NutationElements.deltaPsi); // add aberration effect, so we have an final ecliptical coordinates of the Sun sunEcliptical += Aberration.AberrationEffect(sunEcliptical.Distance); return(sunEcliptical); }
/// <summary> /// Gets equatorial geocentrical coordinates for current epoch /// </summary> protected CrdsEquatorial EquatorialG(SkyContext c, T body) { // Precessinal elements to convert between epochs var pe = c.Get(GetPrecessionalElements); // Equatorial geocentrical coordinates for J2000 epoch var eq0 = c.Get(EquatorialJ2000, body); // Equatorial coordinates for the mean equinox and epoch of the target date CrdsEquatorial eq = Precession.GetEquatorialCoordinates(eq0, pe); // Nutation effect var eq1 = Nutation.NutationEffect(eq, c.NutationElements, c.Epsilon); // Aberration effect var eq2 = Aberration.AberrationEffect(eq, c.AberrationElements, c.Epsilon); // Apparent coordinates of the object eq += eq1 + eq2; return(eq); }
/// <summary> /// Gets equatorial coordinates of a star for current epoch /// </summary> public CrdsEquatorial Equatorial(SkyContext c, Nova n) { PrecessionalElements p = c.Get(GetPrecessionalElements); double years = c.Get(YearsSince2000); // Initial coodinates for J2000 epoch CrdsEquatorial eq0 = new CrdsEquatorial(n.Equatorial0); // Equatorial coordinates for the mean equinox and epoch of the target date CrdsEquatorial eq = Precession.GetEquatorialCoordinates(eq0, p); // Nutation effect var eq1 = Nutation.NutationEffect(eq, c.NutationElements, c.Epsilon); // Aberration effect var eq2 = Aberration.AberrationEffect(eq, c.AberrationElements, c.Epsilon); // Apparent coordinates of the star eq += eq1 + eq2; return(eq); }
public CrdsEcliptical Ecliptical(SkyContext c) { // get Earth coordinates CrdsHeliocentrical crds = PlanetPositions.GetPlanetCoordinates(Planet.EARTH, c.JulianDay, highPrecision: true); // transform to ecliptical coordinates of the Sun var ecl = new CrdsEcliptical(Angle.To360(crds.L + 180), -crds.B, crds.R); // get FK5 system correction CrdsEcliptical corr = PlanetPositions.CorrectionForFK5(c.JulianDay, ecl); // correct solar coordinates to FK5 system ecl += corr; // add nutation effect ecl += Nutation.NutationEffect(c.NutationElements.deltaPsi); // add aberration effect ecl += Aberration.AberrationEffect(ecl.Distance); return(ecl); }
public void GetSolarCoordinatesLP() { double jde = 2448908.5; // get Earth coordinates CrdsHeliocentrical crds = PlanetPositions.GetPlanetCoordinates(3, jde, highPrecision: false); // transform to ecliptical coordinates of the Sun CrdsEcliptical ecl = new CrdsEcliptical(Angle.To360(crds.L + 180), -crds.B, crds.R); // get FK5 system correction CrdsEcliptical corr = PlanetPositions.CorrectionForFK5(jde, ecl); // correct solar coordinates to FK5 system ecl += corr; var nutation = Nutation.NutationElements(jde); // True obliquity double epsilon = Date.TrueObliquity(jde, nutation.deltaEpsilon); // add nutation effect ecl += Nutation.NutationEffect(nutation.deltaPsi); // calculate aberration effect CrdsEcliptical aberration = Aberration.AberrationEffect(ecl.Distance); // add aberration effect ecl += aberration; // convert ecliptical to equatorial coordinates CrdsEquatorial eq = ecl.ToEquatorial(epsilon); // check apparent equatorial coordinates // assume an accuracy of 0.5'' is sufficient Assert.AreEqual(198.378178, eq.Alpha, 1.0 / 3600 * 0.5); Assert.AreEqual(-7.783871, eq.Delta, 1.0 / 3600 * 0.5); }
/// <summary> /// Gets equatorial coordinates of a star for current epoch /// </summary> private CrdsEquatorial Equatorial(SkyContext context, Tycho2Star star) { PrecessionalElements p = context.Get(PrecessionalElements); double years = context.Get(YearsSince2000); // Take into account effect of proper motion: // now coordinates are for the mean equinox of J2000.0, // but for epoch of the target date var eq0 = star.Equatorial0 + new CrdsEquatorial(star.PmRA * years / 3600000, star.PmDec * years / 3600000); // Equatorial coordinates for the mean equinox and epoch of the target date CrdsEquatorial eq = Precession.GetEquatorialCoordinates(eq0, p); // Nutation effect var eqN = Nutation.NutationEffect(eq, context.NutationElements, context.Epsilon); // Aberration effect var eqA = Aberration.AberrationEffect(eq, context.AberrationElements, context.Epsilon); // Apparent coordinates of the star eq += eqN + eqA; return(eq); }