protected override void OnTimeChanged() { // Calculate geocentric coordinates Vector3 bodyLocation = this.HeliocentricLocation - Earth.Instance.HeliocentricLocation; EclipticCoordinate geocentricCoordinate = new EclipticCoordinate(bodyLocation); this.EquatorialCoordinate = ODE.Astronomy.EquatorialCoordinate.From(geocentricCoordinate, this.Time); base.OnTimeChanged(); }
// Time not used in current calculation, but might be need in future refinements public static EquatorialCoordinate From(EclipticCoordinate eclipticCoordinate, Time time) { // Calculate right ascension and declination Angle angleEpsilon = Angle.FromDegrees(23.4392911); // obliquity of the ecliptic -- see Meeus, pg. 92 Angle angleRightAscension = Angle.ArcTangent(eclipticCoordinate.Longitude.Sine * angleEpsilon.Cosine - eclipticCoordinate.Latitude.Tangent * angleEpsilon.Sine, eclipticCoordinate.Longitude.Cosine); angleRightAscension.NormalizePositive(); Angle angleDeclination = Angle.Zero; angleDeclination.Sine = eclipticCoordinate.Latitude.Sine * angleEpsilon.Cosine + eclipticCoordinate.Latitude.Cosine * angleEpsilon.Sine * eclipticCoordinate.Longitude.Sine; angleDeclination.NormalizeAroundZero(); return(new EquatorialCoordinate(angleRightAscension, angleDeclination)); }