private void PrepareEditForm(Sky sky, Star star) { Text = "Редактирование звезды"; bDel.Visible = true; this.sky = sky; this.star = star; // Настройка созвездий. cBoxCons.DataSource = sky.Constellations; cons = Filter.GetConstellationFromStar(star, sky); cBoxCons.SelectedIndex = sky.Constellations.IndexOf(cons); // Заполнение данными. tBoxName.Text = star.Name; tBoxUrl.Text = star.Url; cBoxUnit.DataSource = units; tBoxDist.Text = Editor.ToString(star.Distance); tBoxMagn.Text = Editor.ToString(star.Magnitude); EquatorialCS equa = star.Location; VerticalCord decl = equa.Declination; HorizontalCord RA = equa.RightAscension; numDeclDegree.Value = decl.Degrees; numDeclMinutes.Value = decl.Minutes; numDeclSeconds.Value = decl.Seconds; numRADegree.Value = RA.Degrees / 15; numRAMinutes.Value = RA.Minutes; numRASeconds.Value = RA.Seconds; }
private void SaveData() { string name = tBoxName.Text; if (!ValidateName(name) || !IsAllFieldsFilled()) { return; } double distance = GetDistance(); double magn = Editor.ToDouble(tBoxMagn.Text); string url = tBoxUrl.Text; VerticalCord vert = GetDeclination(); HorizontalCord hor = GetRightAscension(); EquatorialCS equa = new EquatorialCS(vert, hor); if (isAddForm) { Star star = new Star(equa, name, magn, distance, url); cons.Stars.Add(star); } else { star.Name = name; star.Distance = distance; star.Magnitude = magn; star.Location = equa; star.Url = url; Constellation old = Filter.GetConstellationFromStar(star, sky); if (!cons.Equals(old)) { cons.Stars.Add(star); old.Stars.Remove(star); } } DialogResult = DialogResult.OK; Close(); }
/// <summary> /// Показывает, видно ли когда-нибудь звезду. /// </summary> /// <param name="s">Звезда.</param> /// <param name="gcs">Координаты наблюдателя.</param> /// <returns>Потенциальная видимость звезды.</returns> public static bool IsEverVisible(Star s, GeographicCS gcs) { // Широта наблюдателя. int degree = gcs.Latitude.Degrees; // Если он на экваторе, все звёзды когда-нибудь будут видны. if (degree == 0) { return(true); } // Координаты ближайшего полюса. VerticalCord vertical = (degree > 0) ? VerticalCord.GetMax() : VerticalCord.GetMin(); // Минимальная склонение видимости звёзд. VerticalCord minLatitude = (vertical - gcs.Latitude) * (-1); return((degree > 0) ? minLatitude <s.Location.Declination : minLatitude> s.Location.Declination); }
/// <summary> /// Показывает, постоянно линаходится звезда над горизонтом. /// </summary> /// <param name="s">Звезда</param> /// <param name="gcs">Земные координаты наблюдателя</param> /// <returns>Постоянство нахождения над горизонтом</returns> public static bool IsAlwaysVisible(Star s, GeographicCS gcs) { // Широта наблюдателя. int degree = gcs.Latitude.Degrees; // Если он на экваторе, нет незаходящих звёзд. if (degree == 0) { return(false); } // Координаты ближайшего полюса. VerticalCord vertical = (degree > 0) ? VerticalCord.GetMax() : VerticalCord.GetMin(); // Минимальное склонение незаходящих звёзд. VerticalCord minLatitude = vertical - gcs.Latitude; return((degree > 0) ? minLatitude <s.Location.Declination : minLatitude> s.Location.Declination); }
private void SetViewHuman(Human human) { // Настройка времени. // dTPickerCurrDateTime.Value = human.LocalTime; // Время не подгружается, а берётся текущее. // Настройка координат. GeographicCS gcs = human.Location; VerticalCord lat = gcs.Latitude; HorizontalCord lon = gcs.Longitude; numLatitudeDegree.Value = lat.Degrees; numLatitudeMinutes.Value = lat.Minutes; numLatitudeSeconds.Value = lat.Seconds; numLongtitudeDegree.Value = (lon.Degrees <= 180) ? lon.Degrees : lon.Degrees - 360; numLongtitudeMinutes.Value = lon.Minutes; numLongtitudeSeconds.Value = lon.Seconds; }
/// <summary> /// Возвращает положение звезды в Горизонтальной системе координат. /// То есть, координаты относительно горизонта и направления на Север. /// </summary> /// <param name="s">Звезда.</param> /// <param name="h">Наблюдатель.</param> /// <returns>Координаты звезды в горизонтальной системе координат.</returns> public static HorizontalCS GetCurrentStarLocation(Star s, Human h) { // 1.Вычисление модифицированной юлианской даты на начало суток MD. // Lon – долгота наблюдателя. double Lon = h.Location.Longitude.GetDegrees(); // Lat - широта. double Lat = h.Location.Latitude.GetDegrees(); // Время по Гринвичу. DateTime utc = h.UTC; // Прямое восхождение звезды. double RA = s.Location.RightAscension.GetDegrees(); // Склонение звезды. double Dec = s.Location.Declination.GetDegrees(); // Модифицировання Юлианская дата. double MD = ToModJulianDate(utc); // 2.Вычисление местного звездного времени на момент всемирного времени UT. // Гринвическое среднее звездное время в градусах. double Sg = GetGMST(MD); // Местное звездное время, среднее. double St = Sg + Lon; //3.Часовой угол звезды и высота над горизонтом. // Часовой угол. double Th = (St - RA) % 360; // Cos(z) = Sin(Lat) * Sin(Dec) + Cos(Lat) * Cos(Dec) * Cos(Th). // Косинус зенитного угла. double z = Math.Acos( Math.Sin(GetRadFromDeg(Lat)) * Math.Sin(GetRadFromDeg(Dec)) + Math.Cos(GetRadFromDeg(Lat)) * Math.Cos(GetRadFromDeg(Dec)) * Math.Cos(GetRadFromDeg(Th))); // Перевод в секунды. z = GetDegFromRad(z); // Высота над горизонтом. double H = 90 - z; // Az = atn2(Sin(Th) * Cos(Dec), (sin(H) * Sin(Lat) - Sin(Dec)) / Cos(Lat)). // Азимут звезды в радианах. double Az = Math.Atan2( Math.Sin(GetRadFromDeg(Th)) * Math.Cos(GetRadFromDeg(Dec)), (Math.Sin(GetRadFromDeg(H)) * Math.Cos(GetRadFromDeg(Lat)) - Math.Sin(GetRadFromDeg(Dec))) / Math.Cos(GetRadFromDeg(Lat))); // Азимут звезды в градусах. double az = GetDegFromRad(Az); // Формируем координаты в горизонтальной системе координат. VerticalCord altitude = new VerticalCord(GetSecondsFromGeg(H)); HorizontalCord azimuth = new HorizontalCord(GetSecondsFromGeg(az)); return(new HorizontalCS(altitude, azimuth)); }