public GregorianDateTime TimeWithOffset(double p) { GregorianDateTime dt = new GregorianDateTime(this); dt.shour += p; dt.NormalizeValues(); return(dt); }
//================================================================================== // //================================================================================== public static GregorianDateTime GetNextRise(GCEarthData e, GregorianDateTime vc, bool bRise) { double a, b; double[] h = new double[3]; double hour = 1 / 24.0; double startHour = vc.shour; GregorianDateTime track = new GregorianDateTime(); track.Set(vc); track.NormalizeValues(); // inicializacia prvej hodnoty ELEVATION h[0] = GCCoreAstronomy.GetMoonElevation(e, track); track.shour += hour; h[1] = GCCoreAstronomy.GetMoonElevation(e, track); track.shour += hour; h[2] = GCCoreAstronomy.GetMoonElevation(e, track); for (int c = 0; c < 24; c++) { if ((bRise ? (h[1] < 0.0 && h[2] > 0.0) : (h[1] > 0.0 && h[2] < 0.0))) { a = (h[2] - h[1]) / hour; b = h[2] - a * track.shour; track.shour = -b / a; track.NormalizeValues(); return(track); } h[0] = h[1]; h[1] = h[2]; track.shour += hour; h[2] = GCCoreAstronomy.GetMoonElevation(e, track); } return(track); }
private int CalculateNaksatras(GCLocation loc, GregorianDateTime vcEnd, GregorianDateTime vcAdd, GCEarthData earth, GCConfigRatedEvents rec) { int nData = 0; GregorianDateTime vcNext; int ndst; bool prevNaksatraValid = false; GregorianDateTime prevNaksatra = new GregorianDateTime(); vcAdd.SubtractDays(1); while (vcAdd.IsBeforeThis(vcEnd)) { nData = GCNaksatra.GetNextNaksatra(earth, vcAdd, out vcNext); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { vcNext.InitWeekDay(); vcNext.AddHours(loc.TimeZone.GetBiasMinutesForDay(vcNext) / 60.0); //AddEvent(vcNext, CoreEventType.CCTYPE_NAKS, nData, ndst); AddRating(vcNext, rec.rateNaksatra[nData], rec.rateNaksatra[Prev(nData, 27)]); if (prevNaksatraValid) { double padaLength = (vcNext.GetJulianComplete() - prevNaksatra.GetJulianComplete()) / 4.0; for (int j = 0; j < 4; j++) { //AddEvent(prevNaksatra, CoreEventType.CCTYPE_NAKS_PADA1 + j, nData, ndst); int prevPada = (nData * 4 + j + 107) % 108; AddRating(vcNext, rec.rateNaksatraPada[nData, j], rec.rateNaksatraPada[prevPada / 4, prevPada % 4]); prevNaksatra.shour += padaLength; prevNaksatra.NormalizeValues(); } } prevNaksatra.Set(vcNext); prevNaksatraValid = true; } else { break; } vcAdd.Set(vcNext); vcAdd.shour += 0.2; if (vcAdd.shour >= 1.0) { vcAdd.shour -= 1.0; vcAdd.NextDay(); } } return(nData); }
private void CalculateMoonTimes(GregorianDateTime vcEnd, GregorianDateTime vcAdd, GCEarthData earth, GCConfigRatedEvents rec) { GregorianDateTime vcNext = new GregorianDateTime(); vcAdd.SubtractDays(2); while (vcAdd.IsBeforeThis(vcEnd)) { vcNext.Set(GCMoonData.GetNextRise(earth, vcAdd, true)); vcNext.AddHours(earth.TimeZone.GetBiasMinutesForDay(vcNext) / 60.0); //AddEvent(vcNext, CoreEventType.CCTYPE_M_RISE, 0, ndst); AddRating(vcNext, rec.rateMoonTime[0], rec.rateMoonTime[1]); vcNext.Set(GCMoonData.GetNextRise(earth, vcNext, false)); vcNext.AddHours(earth.TimeZone.GetBiasMinutesForDay(vcNext) / 60.0); //AddEvent(vcNext, CoreEventType.CCTYPE_M_SET, 0, ndst); AddRating(vcNext, rec.rateMoonTime[1], rec.rateMoonTime[0]); vcNext.shour += 0.05; vcNext.NormalizeValues(); vcAdd.Set(vcNext); } }
public void CalculateEvents(GCLocation loc, int nYear) { //GCSunData sun = new GCSunData(); //DstTypeChange ndst = DstTypeChange.DstOff; int nData; TResultCoreEvents inEvents = this; this.Clear(); this.EarthLocation = loc; this.Year = nYear; GregorianDateTime vcStart = new GregorianDateTime(Year - 1, 12, 29); GregorianDateTime vcEnd = new GregorianDateTime(Year + 1, 1, 2); GregorianDateTime vc = new GregorianDateTime(); GregorianDateTime vcAdd = new GregorianDateTime(), vcNext = new GregorianDateTime(); GCEarthData earth = loc.GetEarthData(); vc.Set(vcStart); vc.TimezoneHours = loc.OffsetUtcHours; vcAdd.Set(vc); vcAdd.InitWeekDay(); /*while (vcAdd.IsBeforeThis(vcEnd)) * { * ndst = loc.TimeZone.DetermineDaylightChange(vcAdd); * vcAdd.NextDay(); * }*/ if (Full || GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_TITHI) != 0) { vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { nData = GCTithi.GetNextTithiStart(earth, vcAdd, out vcNext); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { //vcNext.InitWeekDay(); //ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_TITHI, nData); } else { break; } vcAdd.Set(vcNext); vcAdd.shour += 0.2; if (vcAdd.shour >= 1.0) { vcAdd.shour -= 1.0; vcAdd.NextDay(); } } } if (Full || GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_NAKSATRA) != 0) { vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { nData = GCNaksatra.GetNextNaksatra(earth, vcAdd, out vcNext); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { //vcNext.InitWeekDay(); //ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_NAKS, nData); } else { break; } vcAdd.Set(vcNext); vcAdd.shour += 0.2; if (vcAdd.shour >= 1.0) { vcAdd.shour -= 1.0; vcAdd.NextDay(); } } } if (Full || GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_YOGA) != 0) { vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { nData = GCYoga.GetNextYogaStart(earth, vcAdd, out vcNext); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { //vcNext.InitWeekDay(); //ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_YOGA, nData); } else { break; } vcAdd.Set(vcNext); vcAdd.shour += 0.2; if (vcAdd.shour >= 1.0) { vcAdd.shour -= 1.0; vcAdd.NextDay(); } } } if (Full || GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_SANKRANTI) != 0) { vcNext = new GregorianDateTime(); vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { vcNext.Set(GCSankranti.GetNextSankranti(vcAdd, earth, out nData)); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { //vcNext.InitWeekDay(); //ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_SANK, nData); } else { break; } vcAdd.Set(vcNext); vcAdd.NextDay(); } } if (Full || GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_MOONRASI) != 0) { vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { nData = GCMoonData.GetNextMoonRasi(earth, vcAdd, out vcNext); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { //vcNext.InitWeekDay(); //ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_M_RASI, nData); } else { break; } vcAdd.Set(vcNext); vcAdd.shour += 0.5; vcAdd.NormalizeValues(); } } if (Full || GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_CONJUNCTION) != 0) { double dlong; vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { dlong = GCConjunction.GetNextConjunction(vcAdd, out vcNext, true, earth); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { vcNext.InitWeekDay(); //ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_CONJ, GCRasi.GetRasi(dlong, GCAyanamsha.GetAyanamsa(vcNext.GetJulianComplete()))); } else { break; } vcAdd.Set(vcNext); vcAdd.NextDay(); } } inEvents.Sort(); }
public static GregorianDateTime CalcTithiEndEx(GregorianDateTime vcStart, int GYear, int nMasa, int nPaksa, int nTithi, GCEarthData earth, out GregorianDateTime endTithi) { int i, gy, nType; GregorianDateTime d = new GregorianDateTime(); GCAstroData day = new GCAstroData(); int tithi; int counter; GregorianDateTime start = new GregorianDateTime(), end = new GregorianDateTime(); // SUNDATA sun; // MOONDATA moon; double sunrise; start.shour = -1.0; end.shour = -1.0; start.day = start.month = start.year = -1; end.day = end.month = end.year = -1; /* d = GetFirstDayOfYear(earth, nGYear + 1486); * d.shour = 0.5; * d.TimeZone = earth.tzone; */ d.Set(vcStart); i = 0; do { d.AddDays(13); day.DayCalc(d, earth); day.Masa = day.MasaCalc(d, earth); gy = day.GaurabdaYear; i++; }while (((day.sunRise.Paksa != nPaksa) || (day.Masa != nMasa)) && (i <= 30)); if (i >= 30) { d.year = d.month = d.day = -1; endTithi = null; return(d); } // we found masa and paksa // now we have to find tithi tithi = nTithi + nPaksa * 15; if (day.sunRise.Tithi == tithi) { // loc1 // find tithi juncts in this day and according to that times, // look in previous or next day for end and start of this tithi nType = 1; } else { if (day.sunRise.Tithi < tithi) { // do increment of date until nTithi == tithi // but if nTithi > tithi // then do decrement of date counter = 0; while (counter < 30) { d.NextDay(); day.DayCalc(d, earth); if (day.sunRise.Tithi == tithi) { goto cont_2; } if ((day.sunRise.Tithi < tithi) && (day.sunRise.Paksa != nPaksa)) { d.PreviousDay(); goto cont_2; } if (day.sunRise.Tithi > tithi) { d.PreviousDay(); goto cont_2; } counter++; } // somewhere is error d.year = d.month = d.day = 0; nType = 0; } else { // do decrement of date until nTithi <= tithi counter = 0; while (counter < 30) { d.PreviousDay(); day.DayCalc(d, earth); if (day.sunRise.Tithi == tithi) { goto cont_2; } if ((day.sunRise.Tithi > tithi) && (day.sunRise.Paksa != nPaksa)) { goto cont_2; } if (day.sunRise.Tithi < tithi) { goto cont_2; } counter++; } // somewhere is error d.year = d.month = d.day = 0; nType = 0; } cont_2: if (day.sunRise.Tithi == tithi) { // do the same as in loc1 nType = 1; } else { // nTithi != tithi and nTithi < tithi // but on next day is nTithi > tithi // that means we will find start and the end of tithi // in this very day or on next day before sunrise nType = 2; } } // now we know the type of day-accurancy // nType = 0 means, that we dont found a day // nType = 1 means, we find day, when tithi was present at sunrise // nType = 2 means, we found day, when tithi started after sunrise // but ended before next sunrise // sunrise = day.sunRise.TotalDays; endTithi = new GregorianDateTime(); if (nType == 1) { GregorianDateTime d1, d2; d.shour = sunrise; GCTithi.GetPrevTithiStart(earth, d, out d1); //d = d1; //d.shour += 0.02; GCTithi.GetNextTithiStart(earth, d, out d2); endTithi.Set(d2); return(d1); } else if (nType == 2) { GregorianDateTime d1, d2; d.shour = sunrise; GCTithi.GetNextTithiStart(earth, d, out d1); d.Set(d1); d.shour += 0.1; d.NormalizeValues(); GCTithi.GetNextTithiStart(earth, d, out d2); endTithi.Set(d2); return(d1); } // if nType == 0, then this algoritmus has some failure if (nType == 0) { d.year = 0; d.month = 0; d.day = 0; d.shour = 0.0; endTithi.Set(d); } else { d.Set(start); endTithi.Set(end); } return(d); }
private void CalculateEvents(GCLocation loc, GregorianDateTime vcStart, GregorianDateTime vcEnd, GCConfigRatedEvents rec) { GregorianDateTime vc = new GregorianDateTime(vcStart); double biasHours = 0; ShowAboveOnly = rec.useAcceptLimit; ShowLongerThan = rec.useMinPeriodLength; RatingsAboveOnly = rec.acceptLimit; MinIntervalLength = rec.minPeriodLength; //bool hasAscendent = rec.RequiredGrahaRasi(9); bool hasRahuKalam = rec.rateKalas[KalaType.KT_RAHU_KALAM].Usable; bool hasYamaghanti = rec.rateKalas[KalaType.KT_YAMA_GHANTI].Usable; bool hasGulikalam = rec.rateKalas[KalaType.KT_GULI_KALAM].Usable; bool hasAbhijit = rec.rateKalas[KalaType.KT_ABHIJIT].Usable; bool hasMuhurta = rec.RequiredMuhurta(); p_events.Clear(); EarthLocation = new GCLocation(loc); DateStart = new GregorianDateTime(vcStart); DateEnd = new GregorianDateTime(vcEnd); bool hasPreviousSunset = false; GregorianDateTime previousSunset = new GregorianDateTime(); GregorianDateTime vcAdd = new GregorianDateTime(vcStart); GregorianDateTime vcNext = new GregorianDateTime(); GCEarthData earth = loc.GetEarthData(); vcAdd.InitWeekDay(); GCHourTime sunRise, sunSet; double muhurtaLength = 48.0 / 1440.0; GregorianDateTime muhurtaDate = new GregorianDateTime(); while (vcAdd.IsBeforeThis(vcEnd)) { biasHours = loc.TimeZone.GetBiasMinutesForDay(vcAdd) / 60.0; sunRise = GCSunData.CalcSunrise(vcAdd, earth); sunSet = GCSunData.CalcSunset(vcAdd, earth); sunRise.AddMinutes(biasHours * 60); sunSet.AddMinutes(biasHours * 60); vcAdd.shour = sunRise.TotalDays; vcAdd.InitWeekDay(); //AddEvent(vcAdd, CoreEventType.CCTYPE_S_RISE, 0, ndst); AddRating(vcAdd, rec.rateDayHours[0], rec.rateDayHours[3]); AddRating(vcAdd, rec.rateDay[0], rec.rateDayHours[1]); //AddEvent(vcAdd, CoreEventType.CCTYPE_DAY_OF_WEEK, vcAdd.dayOfWeek, ndst); AddRating(vcAdd, rec.weekday[vcAdd.dayOfWeek], rec.weekday[Prev(vcAdd.dayOfWeek, 7)]); if (hasPreviousSunset) { previousSunset.shour += (vcAdd.shour + 1.0 - previousSunset.shour) / 2; previousSunset.NormalizeValues(); //AddEvent(previousSunset, CoreEventType.CCTYPE_S_MIDNIGHT, 0, ndst); AddRating(previousSunset, rec.rateDayHours[3], rec.rateDayHours[2]); } if (hasMuhurta) { muhurtaDate.Set(vcAdd); muhurtaDate.shour -= 2 * muhurtaLength; muhurtaDate.NormalizeValues(); for (int j = 0; j < 30; j++) { //AddEvent(muhurtaDate, CoreEventType.CCTYPE_DAY_MUHURTA, (j + 28) % 30, ndst); int mi = (j + 28) % 30; AddRating(muhurtaDate, rec.rateMuhurta[mi], rec.rateMuhurta[Prev(mi, 30)]); } } vcAdd.shour = (sunRise.TotalDays + sunSet.TotalDays) / 2; //AddEvent(vcAdd, CoreEventType.CCTYPE_S_NOON, 0, ndst); AddRating(vcAdd, rec.rateDayHours[1], rec.rateDayHours[0]); vcAdd.shour = sunSet.TotalDays; //AddEvent(vcAdd, CoreEventType.CCTYPE_S_SET, 0, ndst); AddRating(vcAdd, rec.rateDayHours[2], rec.rateDayHours[1]); AddRating(vcAdd, rec.rateDay[1], rec.rateDayHours[0]); previousSunset.Set(vcAdd); hasPreviousSunset = true; if (hasRahuKalam) { CalculateKalam(vcAdd, sunRise.TotalDays, sunSet.TotalDays, KalaType.KT_RAHU_KALAM, rec); } if (hasYamaghanti) { CalculateKalam(vcAdd, sunRise.TotalDays, sunSet.TotalDays, KalaType.KT_YAMA_GHANTI, rec); } if (hasGulikalam) { CalculateKalam(vcAdd, sunRise.TotalDays, sunSet.TotalDays, KalaType.KT_GULI_KALAM, rec); } if (hasAbhijit) { CalculateKalam(vcAdd, sunRise.TotalDays, sunSet.TotalDays, KalaType.KT_ABHIJIT, rec); } vcAdd.NextDay(); } if (rec.RequiredGrahaRasi(9)) { GCAscendant asc = new GCAscendant(); asc.Earth = EarthLocation.GetEarthData(); asc.CurrentDateTime = new GregorianDateTime(vc); while (asc.GetNextAscendantBefore(vcEnd)) { AddRating(asc.CurrentDateTime.TimeWithOffset(biasHours), rec.rateGrahaRasi[9, asc.CurrentSign], rec.rateGrahaRasi[9, Prev(asc.CurrentSign, 12)]); asc.CurrentDateTime.AddHours(0.5); } } if (rec.RequiredTithi()) { vcAdd.Set(vc); vcAdd.shour = 0.0; CalculateTithis(loc, vcEnd, vcAdd, earth, rec); } if (rec.RequiredNaksatra()) { vcAdd.Set(vc); vcAdd.shour = 0.0; CalculateNaksatras(loc, vcEnd, vcAdd, earth, rec); } if (rec.RequiredYoga()) { vcAdd.Set(vc); vcAdd.shour = 0.0; CalculateYoga(loc, vcEnd, vcAdd, earth, rec); } for (int i = 0; i < 9; i++) { if (rec.RequiredGrahaRasi(i)) { vcAdd.Set(vc); vcAdd.shour = 0.0; CalculatePlanetRasi(i, loc, vcEnd, vcAdd, rec); //CalculateSunRasi(loc, vcEnd, vcAdd, rec); } if (rec.RequiredGrahaHouse(i)) { vcAdd.Set(vc); vcAdd.shour = 0.0; CalculatePlanetHouse(i, loc, vcEnd, vcAdd, rec); //CalculateSunRasi(loc, vcEnd, vcAdd, rec); } } /*if (rec.RequiredGrahaRasi(1)) * { * vcAdd.Set(vc); * vcAdd.shour = 0.0; * CalculateMoonRasi(loc, vcEnd, vcAdd, earth, rec); * * }*/ if (rec.RequiredMoonTimes()) { vcAdd.Set(vc); vcAdd.shour = 0.0; CalculateMoonTimes(vcEnd, vcAdd, earth, rec); } IComparer <GCRatedMoment> C = new GCRatedMoment.ComparerClass(); p_ratings.Sort(C); }
public void CalculateEvents(GCLocation loc, GregorianDateTime vcStart, GregorianDateTime vcEnd) { //GCSunData sun = new GCSunData(); DstTypeChange ndst = 0; int nData; TResultEvents inEvents = this; this.Clear(); this.EarthLocation = loc; this.StartDateTime = new GregorianDateTime(vcStart); this.EndDateTime = new GregorianDateTime(vcEnd); GregorianDateTime vc = new GregorianDateTime(); GregorianDateTime vcAdd = new GregorianDateTime(), vcNext = new GregorianDateTime(); GCEarthData earth = loc.GetEarthData(); vc.Set(vcStart); vc.TimezoneHours = loc.OffsetUtcHours; vcAdd.Set(vc); vcAdd.InitWeekDay(); GCHourTime sunriseData, sunsetData; double sunRise, sunSet; double r1, r2; while (vcAdd.IsBeforeThis(vcEnd)) { sunriseData = GCSunData.CalcSunrise(vcAdd, earth); sunsetData = GCSunData.CalcSunset(vcAdd, earth); sunRise = sunriseData.TotalDays; sunSet = sunsetData.TotalDays; ndst = loc.TimeZone.DetermineDaylightChange(vcAdd); if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_SUN) != 0) { ndst = loc.TimeZone.DetermineDaylightChange(vcAdd); vcAdd.shour = sunriseData.TotalDays - 96.0 / 1440.0; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_S_ARUN, 0, ndst); vcAdd.shour = sunRise; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_S_RISE, 0, ndst); vcAdd.shour = (sunRise + sunSet) / 2; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_S_NOON, 0, ndst); vcAdd.shour = sunSet; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_S_SET, 0, ndst); } /*if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_ASCENDENT) != 0) * { * todayLongitude = sun.longitude_deg; * vcAdd.shour = sunRise; * todaySunriseHour = sunRise; * if (previousLongitude < -10) * { * GregorianDateTime prevSunrise = new GregorianDateTime(); * prevSunrise.Set(vcAdd); * prevSunrise.PreviousDay(); * sun.SunCalc(prevSunrise, earth); * previousSunriseHour = sun.rise.GetDayTime() - 1; * previousLongitude = sun.longitude_deg; * fromTimeLimit = 0; * } * * double a, b; * double jd = vcAdd.GetJulianComplete(); * double ayan = GCAyanamsha.GetAyanamsa(jd); * r1 = GCMath.putIn360(previousLongitude - ayan) / 30; * r2 = GCMath.putIn360(todayLongitude - ayan) / 30; * * while (r2 > r1 + 13) * { * r2 -= 12.0; * } * while (r2 < r1 + 11) * { * r2 += 12.0; * } * * a = (r2 - r1) / (todaySunriseHour - previousSunriseHour); * b = r2 - a * todaySunriseHour; * * for (double tr = Math.Floor(r1) + 1.0; tr < r2; tr += 1.0) * { * double tm = (tr - b) / a; * if (tm > fromTimeLimit) * { * vcNext.Set(vcAdd); * vcNext.shour = tm; * vcNext.NormalizeValues(); * inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_ASCENDENT, (int)tr, ndst); * } * } * * previousLongitude = todayLongitude; * previousSunriseHour = todaySunriseHour - 1; * fromTimeLimit = previousSunriseHour; * }*/ if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_RAHUKALAM) != 0) { GCSunData.CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, out r1, out r2, KalaType.KT_RAHU_KALAM); vcAdd.shour = r1; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_KALA_START, KalaType.KT_RAHU_KALAM, ndst); vcAdd.shour = r2; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_KALA_END, KalaType.KT_RAHU_KALAM, ndst); } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_YAMAGHANTI) != 0) { GCSunData.CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, out r1, out r2, KalaType.KT_YAMA_GHANTI); vcAdd.shour = r1; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_KALA_START, KalaType.KT_YAMA_GHANTI, ndst); vcAdd.shour = r2; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_KALA_END, KalaType.KT_YAMA_GHANTI, ndst); } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_GULIKALAM) != 0) { GCSunData.CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, out r1, out r2, KalaType.KT_GULI_KALAM); vcAdd.shour = r1; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_KALA_START, KalaType.KT_GULI_KALAM, ndst); vcAdd.shour = r2; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_KALA_END, KalaType.KT_GULI_KALAM, ndst); } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_ABHIJIT_MUHURTA) != 0) { GCSunData.CalculateKala(sunRise, sunSet, vcAdd.dayOfWeek, out r1, out r2, KalaType.KT_ABHIJIT); if (r1 > 0 && r2 > 0) { vcAdd.shour = r1; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_KALA_START, KalaType.KT_ABHIJIT, ndst); vcAdd.shour = r2; inEvents.AddEvent(vcAdd, CoreEventType.CCTYPE_KALA_END, KalaType.KT_ABHIJIT, ndst); } } vcAdd.NextDay(); } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_ASCENDENT) != 0) { GCAscendant asc = new GCAscendant(); asc.Earth = EarthLocation.GetEarthData(); asc.CurrentDateTime = new GregorianDateTime(vc); while (asc.GetNextAscendantBefore(vcEnd)) { ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(asc.CurrentDateTime, CoreEventType.CCTYPE_ASCENDENT, asc.CurrentSign, ndst); asc.CurrentDateTime.AddHours(0.5); } } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_TITHI) != 0) { vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { nData = GCTithi.GetNextTithiStart(earth, vcAdd, out vcNext); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { vcNext.InitWeekDay(); ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_TITHI, nData, ndst); } else { break; } vcAdd.Set(vcNext); vcAdd.shour += 0.2; if (vcAdd.shour >= 1.0) { vcAdd.shour -= 1.0; vcAdd.NextDay(); } } } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_NAKSATRA) != 0) { vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { nData = GCNaksatra.GetNextNaksatra(earth, vcAdd, out vcNext); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { vcNext.InitWeekDay(); ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_NAKS, nData, ndst); } else { break; } vcAdd.Set(vcNext); vcAdd.shour += 0.2; if (vcAdd.shour >= 1.0) { vcAdd.shour -= 1.0; vcAdd.NextDay(); } } } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_YOGA) != 0) { vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { nData = GCYoga.GetNextYogaStart(earth, vcAdd, out vcNext); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { vcNext.InitWeekDay(); ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_YOGA, nData, ndst); } else { break; } vcAdd.Set(vcNext); vcAdd.shour += 0.2; if (vcAdd.shour >= 1.0) { vcAdd.shour -= 1.0; vcAdd.NextDay(); } } } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_SANKRANTI) != 0) { vcNext = new GregorianDateTime(); vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { vcNext.Set(GCSankranti.GetNextSankranti(vcAdd, earth, out nData)); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { vcNext.InitWeekDay(); ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_SANK, nData, ndst); } else { break; } vcAdd.Set(vcNext); vcAdd.NextDay(); } } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_MOONRASI) != 0) { vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { nData = GCMoonData.GetNextMoonRasi(earth, vcAdd, out vcNext); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { vcNext.InitWeekDay(); ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_M_RASI, nData, ndst); } else { break; } vcAdd.Set(vcNext); vcAdd.shour += 0.5; vcAdd.NormalizeValues(); } } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_CONJUNCTION) != 0) { double dlong; vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { dlong = GCConjunction.GetNextConjunction(vcAdd, out vcNext, true, earth); if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) { vcNext.InitWeekDay(); ndst = loc.TimeZone.DetermineDaylightChange(vcNext); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_CONJ, GCRasi.GetRasi(dlong, GCAyanamsha.GetAyanamsa(vcNext.GetJulianComplete())), ndst); } else { break; } vcAdd.Set(vcNext); vcAdd.NextDay(); } } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_MOON) != 0) { vcAdd.Set(vc); vcAdd.shour = 0.0; while (vcAdd.IsBeforeThis(vcEnd)) { vcNext.Set(GCMoonData.GetNextRise(earth, vcAdd, true)); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_M_RISE, 0, ndst); vcNext.Set(GCMoonData.GetNextRise(earth, vcNext, false)); inEvents.AddEvent(vcNext, CoreEventType.CCTYPE_M_SET, 0, ndst); vcNext.shour += 0.05; vcNext.NormalizeValues(); vcAdd.Set(vcNext); } } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_ASCENDENT) != 0) {/* * vcAdd = vc; * vcAdd.shour = 0.0; * while(vcAdd.IsBeforeThis(vcEnd)) * { * nData = earth.GetNextAscendentStart(vcAdd, vcNext); * if (vcNext.GetDayInteger() < vcEnd.GetDayInteger()) * { * vcNext.InitWeekDay(); * ndst = TTimeZone.determineDaylightChange(vcNext, loc.m_nDST); * inEvents.AddEvent(vcNext, CCTYPE_ASCENDENT, nData, ndst); * } * else * { * break; * } * vcAdd = vcNext; * vcAdd.shour += 1/24.0; * if (vcAdd.shour >= 1.0) * { * vcAdd.shour -= 1.0; * vcAdd.NextDay(); * } * } * */ } if (GCDisplaySettings.Current.getValue(GCDS.COREEVENTS_SORT) != 0) { inEvents.Sort(SORTING_BY_DATE); } else { inEvents.Sort(SORTING_BY_TYPE); } }
/*********************************************************************/ /* */ /* */ /* */ /* */ /* */ /*********************************************************************/ public static double GetNextConjunction(GregorianDateTime test_date, out GregorianDateTime found, bool this_conj, GCEarthData earth) { double phi = 12.0; double l1, l2, longitudeSun, longitudeMoon; if (this_conj) { test_date.shour += 0.2; test_date.NormalizeValues(); } double jday = test_date.GetJulianComplete(); double xj; GregorianDateTime d = new GregorianDateTime(); d.Set(test_date); GregorianDateTime xd = new GregorianDateTime(); double scan_step = 1.0; int prev_tit = 0; int new_tit = -1; longitudeMoon = GCCoreAstronomy.GetMoonLongitude(d, earth); longitudeSun = GCSunData.GetSunLongitude(d); l1 = GCMath.putIn180(longitudeMoon - longitudeSun); prev_tit = GCMath.IntFloor(l1 / phi); int counter = 0; while (counter < 20) { xj = jday; xd.Set(d); jday += scan_step; d.shour += scan_step; if (d.shour > 1.0) { d.shour -= 1.0; d.NextDay(); } longitudeMoon = GCCoreAstronomy.GetMoonLongitude(d, earth); longitudeSun = GCSunData.GetSunLongitude(d); l2 = GCMath.putIn180(longitudeMoon - longitudeSun); new_tit = GCMath.IntFloor(l2 / phi); if (prev_tit < 0 && new_tit >= 0) { jday = xj; d.Set(xd); scan_step *= 0.5; counter++; continue; } else { l1 = l2; } prev_tit = new_tit; } found = new GregorianDateTime(); found.Set(d); return(longitudeSun); }
public void calculateAppDay(GCLocation location, GregorianDateTime eventDate) { //MOONDATA moon; //SUNDATA sun; GCAstroData d = this.details = new GCAstroData(); GregorianDateTime vc = new GregorianDateTime(); GregorianDateTime vcsun = new GregorianDateTime(); GCEarthData m_earth = location.GetEarthData(); vc.Set(eventDate); vcsun.Set(eventDate); this.b_adhika = false; this.eventTime = new GregorianDateTime(eventDate); Location = location; //d.nTithi = GetPrevTithiStart(m_earth, vc, dprev); //GetNextTithiStart(m_earth, vc, dnext); vcsun.shour -= vcsun.TimezoneHours / 24.0; vcsun.NormalizeValues(); vcsun.TimezoneHours = 0.0; d.sunRise = new GCHourTime(); d.sunRise.TotalDays = vc.shour; d.sunRise.longitude = GCCoreAstronomy.GetSunLongitude(vcsun, m_earth); d.sunRise.longitudeMoon = GCCoreAstronomy.GetMoonLongitude(vcsun, m_earth); d.Ayanamsa = GCAyanamsha.GetAyanamsa(vc.GetJulianComplete()); d.sunRise.Ayanamsa = d.Ayanamsa; // tithi d.Masa = d.MasaCalc(vc, m_earth); if (d.Masa == (int)MasaId.ADHIKA_MASA) { d.Masa = d.sunRise.RasiOfSun; this.b_adhika = true; } vc.Today(); vc.TimezoneHours = m_earth.OffsetUtcHours; int m = 0; GaurabdaDate va = new GaurabdaDate(); GregorianDateTime vctemp; va.tithi = d.sunRise.Tithi; va.masa = d.Masa; va.gyear = GCCalendar.GetGaurabdaYear(vc, m_earth); if (va.gyear < d.GaurabdaYear) { va.gyear = d.GaurabdaYear; } MainInfo.Add(new AppDayInfo(GCStrings.getString(7), eventDate.ToString())); MainInfo.Add(new AppDayBase()); MainInfo.Add(new AppDayInfo(GCStrings.getString(8), eventDate.ShortTimeString())); MainInfo.Add(new AppDayBase()); MainInfo.Add(new AppDayBase()); MainInfo.Add(new AppDayInfo(GCStrings.getString(9), location.Title)); MainInfo.Add(new AppDayInfo(GCStrings.getString(10), location.GetLatitudeString())); MainInfo.Add(new AppDayInfo(GCStrings.getString(11), location.GetLongitudeString())); MainInfo.Add(new AppDayInfo(GCStrings.Localized("Timezone"), location.TimeZoneName)); MainInfo.Add(new AppDayInfo("DST", "N/A")); MainInfo.Add(new AppDayBase()); MainInfo.Add(new AppDayInfo(GCStrings.getString(13), GCTithi.GetName(d.sunRise.Tithi))); MainInfo.Add(new AppDayInfo(GCStrings.getString(14), string.Format("{0:00.000}%", d.sunRise.TithiElapse))); MainInfo.Add(new AppDayInfo(GCStrings.getString(15), GCNaksatra.GetName(d.sunRise.Naksatra))); MainInfo.Add(new AppDayInfo(GCStrings.getString(16), string.Format("{0:00.000}% ({1} pada)", d.sunRise.NaksatraElapse, GCStrings.getString(811 + d.sunRise.NaksatraPada)))); MainInfo.Add(new AppDayInfo(GCStrings.Localized("Moon Rasi"), GCRasi.GetName(d.sunRise.RasiOfMoon))); MainInfo.Add(new AppDayInfo(GCStrings.Localized("Sun Rasi"), GCRasi.GetName(d.sunRise.RasiOfSun))); MainInfo.Add(new AppDayInfo(GCStrings.getString(20), GCPaksa.GetName(d.sunRise.Paksa))); if (b_adhika == true) { MainInfo.Add(new AppDayInfo(GCStrings.getString(22), string.Format("{0} {1}", GCMasa.GetName(d.Masa), GCStrings.getString(21)))); } else { MainInfo.Add(new AppDayInfo(GCStrings.getString(22), GCMasa.GetName(d.Masa))); } MainInfo.Add(new AppDayInfo(GCStrings.getString(23), d.GaurabdaYear.ToString())); if (GCDisplaySettings.Current.getValue(48) == 1) { MainInfo.Add(new AppDayBase(GCDS.APP_CHILDNAMES)); MainInfo.Add(new AppDaySeparator(GCStrings.getString(17))); MainInfo.Add(new AppDayBase(GCDS.APP_CHILDNAMES)); MainInfo.Add(new AppDayInfo(GCDS.APP_CHILDNAMES, GCStrings.getString(18), GCStrings.GetNaksatraChildSylable(d.sunRise.Naksatra, d.sunRise.NaksatraPada) + "...")); MainInfo.Add(new AppDayInfo(GCDS.APP_CHILDNAMES, GCStrings.getString(19), GCStrings.GetRasiChildSylable(d.sunRise.RasiOfMoon) + "...")); } MainInfo.Add(new AppDayBase()); MainInfo.Add(new AppDaySeparator(GCStrings.getString(24))); MainInfo.Add(new AppDayBase()); celeb_date = new GregorianDateTime[TRESULT_APP_CELEBS]; celeb_gy = new int[TRESULT_APP_CELEBS]; for (int i = 0; i < TRESULT_APP_CELEBS + 3; i++) { GCCalendar.VATIMEtoVCTIME(va, out vctemp, m_earth); if (va.gyear > d.GaurabdaYear) { if (m < TRESULT_APP_CELEBS) { MainInfo.Add(new AppDayInfo(string.Format("Gaurabda {0}", va.gyear), vctemp.ToString())); this.celeb_date[m] = new GregorianDateTime(vctemp); this.celeb_gy[m] = va.gyear; m++; } } va.gyear++; } }
public int GetNextAscendentStart(GregorianDateTime startDate, out GregorianDateTime nextDate) { int countOfElements = 12; double phi = 360.0 / countOfElements; double l1, l2; double jday = startDate.GetJulianDetailed(); double xj; GregorianDateTime d = new GregorianDateTime(startDate); // we are calculating in UTC timezone d.shour -= startDate.TimezoneHours / 24.0; d.TimezoneHours = 0.0; GregorianDateTime xd = new GregorianDateTime(); double scan_step = 1.0 / 48.0; int prev_tit = 0; int new_tit = -1; l1 = GetAscendantDegrees(jday); prev_tit = Convert.ToInt32(Math.Floor(l1 / phi)); //Debugger.Log(0, "", "=== FROM " + startDate.LongTimeString() + " ===\n"); //Debugger.Log(0, "", string.Format("{0:00}: {1} {2} {3} {4} \n", 99, l1, prev_tit, jday, d.LongTimeString())); int counter = 0; while (counter < 20) { xj = jday; xd.Set(d); jday += scan_step; d.shour += scan_step; if (d.shour > 1.0) { d.shour -= 1.0; d.NextDay(); } l2 = GetAscendantDegrees(jday); new_tit = Convert.ToInt32(Math.Floor(l2 / phi)); //Debugger.Log(0, "", string.Format("{0:00}: {1} {2} {3} {4} \n", counter, l1, prev_tit, jday, d.LongTimeString())); if (prev_tit != new_tit) { jday = xj; d.Set(xd); scan_step *= 0.5; counter++; //Debugger.Log(0, "", string.Format(" Going back to {0}\n", d.LongTimeString())); continue; } else { l1 = l2; } } // date D was calculated in timezone UTC+0h, therefore // we have to convert it into timezone of input datetime nextDate = new GregorianDateTime(d); nextDate.shour += startDate.TimezoneHours / 24.0; nextDate.TimezoneHours = startDate.TimezoneHours; nextDate.NormalizeValues(); return(new_tit); }