예제 #1
0
        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;
        }
예제 #2
0
        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();
        }
예제 #3
0
        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));
        }