public new static string AngleFormatOf(Double degree, string format) { if (format == null) { return(degree.ToString()); } if (format.Contains("Astro")) { string decimalFormat = "F0"; if (char.IsNumber(format, format.Length - 1)) { decimalFormat = "F" + format.Substring(format.Length - 1, 1); } Sign sign = Sign.SignOf(degree); Double offset = degree % 30; Double minutes = (offset - (int)offset) * 60; return(String.Format("{0:D2}{1}{2}", (int)offset, sign, minutes.ToString(decimalFormat))); } else { return(Angle.AngleFormatOf(degree, format)); } }
private static DateTimeOffset entryDateAround(PlanetId star, Sign destSign, DateTimeOffset around) { Double speed = Planet.AverageSpeedOf(star); int dayAdjustment = 0; DateTimeOffset date = around.UtcDateTime.Date; Position pos = CurrentEphemeris[date, star]; int dif = destSign.Order - Sign.SignOf(pos.Longitude).Order; dayAdjustment = dif > 0 ? (int)((destSign.Order - Sign.SignOf(pos.Longitude).Order - 1) * 30 / speed) : (int)((11 + destSign.Order - Sign.SignOf(pos.Longitude).Order) * 30 / speed); do { date = date.AddDays(dayAdjustment); pos = CurrentEphemeris[date, star]; dayAdjustment--; } while (Sign.SignOf(pos.Longitude) != destSign.Previous); if (Sign.SignOf(pos.Longitude) != destSign.Previous) { throw new Exception(); } do { date = date.AddDays(1); pos = CurrentEphemeris[date, star]; if (Sign.SignOf(pos.Longitude) == destSign) { return(date); } } while (true); throw new Exception(); }