public movement.MoonDiskStatus RunMoonModule(movement.movementCase mC, double NotchesMoonDisk, double SynoticPhaseThisMoonDiskMinutes, TimeSpan ts, DateTime findPhaseUTC, double LunationsElapsedReal) { supporting oMoonK = new supporting(); MoonDiskStatus oMoonDiskStatus = new MoonDiskStatus(); makeDisks oMakeMoonDisk = new makeDisks(); Double SynoticPhase_Minutes_Real = Convert.ToDouble(ConfigurationSettings.AppSettings.Get("SynoticPhase_Minutes_Real")); DateTime KnownFullMoon_UTC_used = Convert.ToDateTime(ConfigurationSettings.AppSettings.Get("KnownFullMoon_UTC_used")); oMoonDiskStatus.LunationsElapsed = ts.TotalMinutes / SynoticPhaseThisMoonDiskMinutes; oMoonDiskStatus.FastOrSlowMinutes = (double)(oMoonDiskStatus.LunationsElapsed - LunationsElapsedReal) * SynoticPhase_Minutes_Real; oMoonDiskStatus.TargetDateUTC = findPhaseUTC; oMoonDiskStatus.RefDateUTC = KnownFullMoon_UTC_used; double GearNotches = mC.GetFinalGearPosition(mC); double FullMoonOffSet = NotchesMoonDisk / 4.0; double MoonDiskFullTravel = FullMoonOffSet + GearNotches; if (MoonDiskFullTravel > NotchesMoonDisk) { double MoonDiskFactor = MoonDiskFullTravel / NotchesMoonDisk; double OneMoonDiskRevolution = MoonDiskFactor - Math.Floor(MoonDiskFactor); MoonDiskFullTravel = OneMoonDiskRevolution * NotchesMoonDisk; } // for 135 notched disk, here is the legend: //new - full - new //1 - 33.75 - 67.5 //67.5 - 101.25 - 135 // for 90 notched disk, here is the legend: //new - full - new //1 - 22.5 - 45 //45 - 67.5 - 90 oMoonDiskStatus.NotchPositionOnMoonDisk = MoonDiskFullTravel; // close to 0 or 100 percent = Full Moon // close to 50 percent = New Moon if (MoonDiskFullTravel > FullMoonOffSet * 2) { MoonDiskFullTravel = MoonDiskFullTravel - FullMoonOffSet * 2; } double OfCompletePhase = (MoonDiskFullTravel / (FullMoonOffSet * 2)) * 100; oMoonDiskStatus.AgeOfMoonDays = oMoonK.AgeOfMoon(OfCompletePhase, SynoticPhaseThisMoonDiskMinutes); oMoonDiskStatus.ofCompletePhasePct = Math.Round(OfCompletePhase, 2); double NewCompleteOfPhase = OfCompletePhase + 50; if (NewCompleteOfPhase > 100) { NewCompleteOfPhase = NewCompleteOfPhase - 100; } oMoonDiskStatus.QuarterStatus = oMoonK.GetPhaseQuarterStatus(NewCompleteOfPhase); oMoonDiskStatus.Notches = NotchesMoonDisk; oMoonDiskStatus.listGearProperties = mC.ListAllProperties(mC, false, "SavedList.txt"); oMoonDiskStatus.PrecisionYrs = GetPrecision((double)SynoticPhaseThisMoonDiskMinutes); return(oMoonDiskStatus); }
public void MakeCompleteMoonDisk() { movement.supporting oMoonK = new movement.supporting(); movement.MoonRealStatus oMoonRealStatus = new movement.MoonRealStatus(); movement.makeDisks mD = new movement.makeDisks(); movement.movementCase mC = new movement.movementCase(); movement.MoonDiskStatus oMoonDiskStatus = new movement.MoonDiskStatus(); double NotchesMoonDisk = 0; double SynoticPhaseThisMoonDiskMinutes = 0; DateTime dT = DateTime.Now; //DateTime dT = Convert.ToDateTime("Dec 22, 2018 9:48 am"); //DateTime dT = Convert.ToDateTime("June 13, 2018 12:00 am"); //DateTime dT = Convert.ToDateTime("Dec. 27, 2118 05:08 PM"); //DateTime dT = Convert.ToDateTime("Dec. 26, 2140 12:00 AM"); DateTime findPhaseUTC = dT.ToUniversalTime(); Double SynoticPhase_Minutes_Real = Convert.ToDouble(ConfigurationSettings.AppSettings.Get("SynoticPhase_Minutes_Real")); DateTime KnownFullMoon_UTC_used = Convert.ToDateTime(ConfigurationSettings.AppSettings.Get("KnownFullMoon_UTC_used")); TimeSpan ts = findPhaseUTC.Subtract(KnownFullMoon_UTC_used); // first, get the real moonphase: oMoonRealStatus = oMoonK.GetRealMoonPhase(SynoticPhase_Minutes_Real, ts, findPhaseUTC); mC = mD.MakeMoonDisk("MakeMoonDisk135Hourly.txt"); // get moonphase for 135 notch disk //mC = mD.MakeMoonDisk("MakeMoonDisk90Daily.txt"); // get moonphase for 90 notch disk //mC = mD.MakeMoonDisk("MakeMoonDisk59Daily.txt"); // get moonphase for 59 notch disk NotchesMoonDisk = oMoonK.GetFinalDiskNotches(mC); SynoticPhaseThisMoonDiskMinutes = oMoonK.CalcSynoticPhaseThisMoonDiskMinutes(NotchesMoonDisk, mC, movement.supporting._BaseDriverTransmission.smooth, movement.supporting._BaseDriverStepMethod.runUnder); switch (mC.BaseGears[0].DiskBaseUnitDriver) {// now get the movement working case gears.BaseGear._DiskBaseUnitDriver.hourly: mC.incNotches(ref mC, (int)Math.Floor(ts.TotalHours)); break; case gears.BaseGear._DiskBaseUnitDriver.daily: mC.incNotches(ref mC, (int)Math.Floor(ts.TotalDays)); break; } // get all final moon phase parameters for type of movement and accuracy oMoonDiskStatus = oMoonK.RunMoonModule(mC, NotchesMoonDisk, SynoticPhaseThisMoonDiskMinutes, ts, findPhaseUTC, oMoonRealStatus.LunationsElapsed); }