Автор работы: Пользователь скрыл имя, 24 Ноября 2016 в 14:13, курсовая работа
Целью данной работы является разработка математической модели движения искусственного спутника по орбите. Моделирование орбит любых искусственных тел в околоземном пространстве опирается на отыскание частных решений ограниченной задачи трех тел. Для этого применяются разнообразные численные и численно – аналитические алгоритмы.
Для осуществления этой цели необходимо решить следующие задачи:
Получение начальных параметров движения ИСЗ;
Предварительная обработка результатов наблюдений с целью отбраковки грубых ошибок и составления нормальных точек;
Построение математической модели движения ИСЗ;
Построение математической модели изменения координат и скорости ИСЗ;
// Задаём новые значение ширины и высоты
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.
// Ось 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.
_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.
Satelite.X = path.PathPoints[path.
// Рисуем след движения спутника
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));
}
}
}
}
Информация о работе Математическая модель движения спутника по орбите