Математическая модель движения спутника по орбите

Автор работы: Пользователь скрыл имя, 24 Ноября 2016 в 14:13, курсовая работа

Описание работы

Целью данной работы является разработка математической модели движения искусственного спутника по орбите. Моделирование орбит любых искусственных тел в околоземном пространстве опирается на отыскание частных решений ограниченной задачи трех тел. Для этого применяются разнообразные численные и численно – аналитические алгоритмы.
Для осуществления этой цели необходимо решить следующие задачи:
Получение начальных параметров движения ИСЗ;
Предварительная обработка результатов наблюдений с целью отбраковки грубых ошибок и составления нормальных точек;
Построение математической модели движения ИСЗ;
Построение математической модели изменения координат и скорости ИСЗ;

Файлы: 1 файл

Курсовая Рыспаев Спутник_15_05_16.doc

— 892.00 Кб (Скачать файл)

// Задаём новые значение ширины  и высоты

Ellipse.Height = this.Size.Height-40; Ellipse.Width = this.Size.Width-20;

Earth.Height = 50; Earth.Width = 50;

Earth.X = (float)Ellipse.Focus - 20;

Earth.Y = (this.Size.Height / 2) - 20 - (int)Earth.Height / 2;

lEllipseWidth.Text = "Ellipse width=" + Ellipse.Width;

lEllipseHeight.Text = "Ellipse height=" + Ellipse.Height;

lFocus.Text = "Focus=" + Ellipse.Focus;

lFormHeight.Text = "Form Height=" + this.Size.Height;

lFormWidth.Text = "Form Width=" + this.Size.Width;

 

// graphic.Clear(System.Drawing.Color.WhiteSmoke);

// Ось OX

graphic.DrawLine(new Pen(Color.White, 1), 1, (this.Size.Height / 2) - 20, this.Size.Width, (this.Size.Height / 2) - 20);

// Эллипс

graphic.DrawEllipse(new Pen(Color.White, 1), Ellipse.X, Ellipse.Y, (float)Ellipse.Width, (float)Ellipse.Height);

// Земля

graphic.DrawEllipse(new Pen(Color.Aqua, 2), Earth.X, Earth.Y, (float)Earth.Width, (float)Earth.Height);

graphic.Save();

}

/// <summary>

/// Фиксация точек через определённый промежуток времени таймера GlobalTimer

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void GlobalTimer_Tick(object sender, EventArgs e)

{

// Рисуем точки следа спутника

graphic.DrawEllipse(new Pen(Color.Gray, 2), Satelite.X, Satelite.Y, (float)Satelite.Width, (float)Satelite.Height);

// Линия от земли до спутника

graphic.DrawLine(new Pen(Color.Indigo, 1), Earth.X + 20, Earth.Y + 25, Satelite.X, Satelite.Y);

// Линия от второго фокуса  до спутника

graphic.DrawLine(new Pen(Color.Salmon, 1), (float)(Ellipse.Width - Ellipse.Focus), Earth.Y + 25, Satelite.X, Satelite.Y);

}

/// <summary>

/// Отрисовка движения спутника  по таймеру

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void Form1_Activated(object sender, EventArgs e)

{

_DrawGraphics();

}

private void button1_Click(object sender, EventArgs e)

{

    Satelite.Y = (this.Size.Height / 2) - 20 - (float)Satelite.Height / 2;

    arcAngleOffset = 1;

    this.lbSatX.Text = "Satelite X=" + Satelite.X.ToString();

    this.lbSatY.Text = "Satelite Y=" + Satelite.Y.ToString();

    graphic.Clear(Color.Black);

    // this.BackgroundImage = global::Kepler.Properties.Resources. n501787527cfe4;

    _DrawGraphics();

    // Рисуем спутник

    graphic.DrawEllipse(new Pen(Color.Gray, 2), Satelite.X, Satelite.Y, (float)Satelite.Width, (float)Satelite.Height);

    Timer timer = new Timer();

    GlobalTimer.Interval = 275;

    timer.Interval = 100;

    GlobalTimer.Tick += GlobalTimer_Tick;

    timer.Tick += timer1_Tick;

    GlobalTimer.Start();

    timer.Start();

}

private void timer1_Tick(object sender, EventArgs e)

{

    #region

    this.lbSatX.Text = "Satelite X=" + Satelite.X.ToString();

    this.lbSatY.Text = "Satelite Y=" + Satelite.Y.ToString();

    this.lbSpeed.Text = "Speed=" + speed.ToString();

        #endregion

    // Выключаем таймер, когда  спутник пройдёт весь путь  по орбите

    if (arcAngleOffset == 361)

   {

        GlobalTimer.Stop();

        ((Timer)sender).Stop();

        return;

    }

    GraphicsPath path = new GraphicsPath();

    // Создаём дугу эллипса, по которой идёт спутник

    path.AddArc(1, 1, (float)Ellipse.Width, (float)Ellipse.Height, 1, arcAngleOffset);

    // На конечной точке  дуги будет сам спутник

    Satelite.Y = path.PathPoints[path.PointCount - 1].Y - (float)Satelite.Height / 2;

    Satelite.X = path.PathPoints[path.PointCount - 1].X - (float)Satelite.Width / 2;

    // Рисуем след движения спутника

    graphic.DrawPath(new Pen(Color.Red, 2), path);

    ((Timer)sender).Interval = (int)speed / 100000;

    arcAngleOffset++;

}

private void Form1_SizeChanged_1(object sender, EventArgs e)

{

    _DrawGraphics();

}

}

}

Код класса, представляющего геометрические фигуры. Geometries.cs

class Geomtries

{

/// <summary>

/// Класс, хранящий значения отрисовывающегося эллипса

/// </summary>

public class Ellipse

{

/// <summary>

/// Конструктор класса

/// </summary>

/// <param name="vHeight">Высота эллипса</param>

/// <param name="vWidth">Ширина эллипса</param>

/// <param name="x">Координата верхней  левой точки по оси X ограничивающего  прямоугольника</param>

/// <param name="y">Координата верхней  левой точки по оси Y ограничивающего  прямоугольника</param>

public Ellipse(double vHeight, double vWidth, float x, float y)

{

this.Height = vHeight;

this.Width = vWidth;

this.X = x;

this.Y = y;

}

/// <summary>

/// Координата верхней левой  точки по оси X ограничивающего  прямоугольника

/// </summary>

public float X;

/// <summary>

/// Координата верхней левой  точки по оси Y ограничивающего  прямоугольника

/// </summary>

public float Y;

/// <summary>

/// Высота эллипса (Ось OY)

/// </summary>

public double Height;

/// <summary>

/// Ширина эллипса (Ось OX)

/// </summary>

public double Width;

/// <summary>

/// Фокус эллипса

/// </summary>

public double Focus

{get

{

if(Math.Sqrt(Math.Abs(Width * Width - Height * Height))==0)

return Width/2;

return Math.Sqrt(Math.Abs(Width * Width - Height * Height));

}

}

}

}

 

 


 



Информация о работе Математическая модель движения спутника по орбите