public double MoonPhase(double JD) { Object3 CelObject = new Object3(); OnSurface onSurface = new OnSurface(); CatEntry3 catEntry3 = new CatEntry3(); SkyPos Output1 = new SkyPos(); SkyPos Output2 = new SkyPos(); Observer Location = new Observer(); double DeltaT = DeltatCode.DeltaTCalc(JD); CelObject.Name = "Moon"; CelObject.Number = Body.Moon; CelObject.Star = catEntry3; CelObject.Type = ASCOM.Astrometry.ObjectType.MajorPlanetSunOrMoon; Location.OnSurf = onSurface; Location.Where = ObserverLocation.EarthGeoCenter; int num1 = (int)Nov31.Place(JD + DeltaT * 1.15740740740741E-05, CelObject, Location, DeltaT, CoordSys.EquinoxOfDate, Accuracy.Full, ref Output2); CelObject.Name = "Sun"; CelObject.Number = Body.Sun; CelObject.Star = catEntry3; CelObject.Type = ASCOM.Astrometry.ObjectType.MajorPlanetSunOrMoon; int num2 = (int)Nov31.Place(JD + DeltaT * 1.15740740740741E-05, CelObject, Location, DeltaT, CoordSys.EquinoxOfDate, Accuracy.Full, ref Output1); return(Range((Output2.RA - Output1.RA) * 15.0, -180.0, false, 180.0, true)); }
public double MoonIllumination(double JD) { Object3 CelObject = new Object3(); OnSurface onSurface = new OnSurface(); CatEntry3 catEntry3 = new CatEntry3(); SkyPos Output1 = new SkyPos(); SkyPos Output2 = new SkyPos(); Observer Location = new Observer(); double DeltaT = DeltatCode.DeltaTCalc(JD); CelObject.Name = "Moon"; CelObject.Number = Body.Moon; CelObject.Star = catEntry3; CelObject.Type = ASCOM.Astrometry.ObjectType.MajorPlanetSunOrMoon; Location.OnSurf = onSurface; Location.Where = ObserverLocation.EarthGeoCenter; int num1 = (int)Nov31.Place(JD + DeltaT * 1.15740740740741E-05, CelObject, Location, DeltaT, CoordSys.EquinoxOfDate, Accuracy.Full, ref Output2); CelObject.Name = "Sun"; CelObject.Number = Body.Sun; CelObject.Star = catEntry3; CelObject.Type = ASCOM.Astrometry.ObjectType.MajorPlanetSunOrMoon; int num2 = (int)Nov31.Place(JD + DeltaT * 1.15740740740741E-05, CelObject, Location, DeltaT, CoordSys.EquinoxOfDate, Accuracy.Full, ref Output1); double num3 = Math.Acos(Math.Sin(Output1.Dec * (Math.PI / 180.0)) * Math.Sin(Output2.Dec * (Math.PI / 180.0)) + Math.Cos(Output1.Dec * (Math.PI / 180.0)) * Math.Cos(Output2.Dec * (Math.PI / 180.0)) * Math.Cos((Output1.RA - Output2.RA) * 15.0 * (Math.PI / 180.0))); return((1.0 + Math.Cos(Math.Atan2(Output1.Dis * Math.Sin(num3), Output2.Dis - Output1.Dis * Math.Cos(num3)))) / 2.0); }
public Angle Distance(double telescopeRA, double telescopeDec) { SkyPos moonPos = new SkyPos(); short ret; ret = novas31.Place(astroutils.JulianDateUT1(0), moon, observer, 0.0, CoordSys.Astrometric, Accuracy.Full, ref moonPos); if (ret != 0) { #region debug debugger.WriteLine(Debugger.DebugLevel.DebugLogic, "Moon.Distance: Cannot calculate Moon position (ret: {0})", ret); #endregion return(Angle.FromDegrees(0)); } double rad = SphereDist(telescopeRA, telescopeDec, moonPos.RA, moonPos.Dec); return(Angle.FromRadians(rad, Angle.Type.Az)); }
private ASCOM.Astrometry.AstroUtils.AstroUtils.BodyInfo BodyAltitude(EventType TypeOfEvent, double JD, double Hour, double Latitude, double Longitude) { Object3 CelObject = new Object3(); OnSurface onSurface = new OnSurface(); CatEntry3 catEntry3 = new CatEntry3(); SkyPos Output = new SkyPos(); Observer Location = new Observer(); ASCOM.Astrometry.AstroUtils.AstroUtils.BodyInfo bodyInfo = new ASCOM.Astrometry.AstroUtils.AstroUtils.BodyInfo(); double JdHigh = JD + Hour / 24.0; double DeltaT = DeltatCode.DeltaTCalc(JD); switch (TypeOfEvent) { case EventType.SunRiseSunset: case EventType.CivilTwilight: case EventType.NauticalTwilight: case EventType.AmateurAstronomicalTwilight: case EventType.AstronomicalTwilight: CelObject.Name = "Sun"; CelObject.Number = Body.Sun; break; case EventType.MoonRiseMoonSet: CelObject.Name = "Moon"; CelObject.Number = Body.Moon; break; case EventType.MercuryRiseSet: CelObject.Name = "Mercury"; CelObject.Number = Body.Mercury; break; case EventType.VenusRiseSet: CelObject.Name = "Venus"; CelObject.Number = Body.Venus; break; case EventType.MarsRiseSet: CelObject.Name = "Mars"; CelObject.Number = Body.Mars; break; case EventType.JupiterRiseSet: CelObject.Name = "Jupiter"; CelObject.Number = Body.Jupiter; break; case EventType.SaturnRiseSet: CelObject.Name = "Saturn"; CelObject.Number = Body.Saturn; break; case EventType.UranusRiseSet: CelObject.Name = "Uranus"; CelObject.Number = Body.Uranus; break; case EventType.NeptuneRiseSet: CelObject.Name = "Neptune"; CelObject.Number = Body.Neptune; break; case EventType.PlutoRiseSet: CelObject.Name = "Pluto"; CelObject.Number = Body.Pluto; break; default: throw new InvalidValueException("TypeOfEvent", TypeOfEvent.ToString(), "Unknown type of event"); } CelObject.Star = catEntry3; CelObject.Type = ASCOM.Astrometry.ObjectType.MajorPlanetSunOrMoon; Location.OnSurf = onSurface; Location.Where = ObserverLocation.EarthGeoCenter; int num1 = (int)Nov31.Place(JdHigh + DeltaT * 1.15740740740741E-05, CelObject, Location, DeltaT, CoordSys.EquinoxOfDate, Accuracy.Full, ref Output); bodyInfo.Distance = Output.Dis * 149597870.691; double Gst = 0; Nov31.SiderealTime(JdHigh, 0.0, DeltaT, GstType.GreenwichApparentSiderealTime, ASCOM.Astrometry.Method.EquinoxBased, Accuracy.Full, ref Gst); double num2 = 15.0 * (Range(Gst + Longitude * (1.0 / 15.0), 0.0, true, 24.0, false) - Output.RA); bodyInfo.Altitude = Math.Asin(Math.Sin(Latitude * (Math.PI / 180.0)) * Math.Sin(Output.Dec * (Math.PI / 180.0)) + Math.Cos(Latitude * (Math.PI / 180.0)) * Math.Cos(Output.Dec * (Math.PI / 180.0)) * Math.Cos(num2 * (Math.PI / 180.0))) * (180.0 / Math.PI); switch (TypeOfEvent) { case EventType.MoonRiseMoonSet: bodyInfo.Radius = 1737.0; break; case EventType.MercuryRiseSet: bodyInfo.Radius = 2439.7; break; case EventType.VenusRiseSet: bodyInfo.Radius = 2439.7; break; case EventType.MarsRiseSet: bodyInfo.Radius = 3396.2; break; case EventType.JupiterRiseSet: bodyInfo.Radius = 69911.0; break; case EventType.SaturnRiseSet: bodyInfo.Radius = 6051.8; break; case EventType.UranusRiseSet: bodyInfo.Radius = 24973.0; break; case EventType.NeptuneRiseSet: bodyInfo.Radius = 24767.0; break; case EventType.PlutoRiseSet: bodyInfo.Radius = 1153.0; break; default: bodyInfo.Radius = 696342.0; break; } return(bodyInfo); }