Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
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));
        }
Esempio n. 4
0
        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);
        }