Пример 1

Орбита

Пример для расчета орбиты движения спутника вокруг Земли.

Для понимания этого примера необходимо уметь работать с векторами знать законы равноускоренного движения. Расчеты будем производить в метрах, а рисовать в тысячах километров. Сначала зададим некоторые константы.

y= r0
Vx=V0                     ; Vx и Vy - вектор начальной скорости спутника 
Vy=0

scale = 0.000001          ; коэффициент перевода метров в тысячи километров
SetCoordinateSystem(-12,-12,12,12,1) ; параметры полотна, 1 единица - тысяча километров
SetBrushParameters(clWhite,1,1)      ; первый слой, цвет кисти белый прозрачный
SetPenParameters  (3,clLightBlue,0,1)
Circle(0,0,rz*scale )                 ; рисуем земной шар
SetPenParameters  (1,clBlack,0,1)

SetBrushParameters(clRed,0,2)       ; второй слой, цвет кисти красный непрозрачный 
SetPenParameters  (1,clPink,0,2)

MoveTo(x*scale,y*scale)           ; перо помещаем в исходною точку движения спутника

Организуем цикл repeat. В теле цикла вычисляем координаты спутника через интервал времени dt. В интервале движение считаем равноускоренным, т.е. пренебрегаем изменением вертора силы тяжести. Длительность одного цикла расчетов берем 0,5 секунды. Для вычисления координат и скоростей используем формулы равноускоренного движения. Каждый сотый цикл отрисовываем фрагмент орбиты. Условие завершения цикла - спутник совершает один оборот.

t=0
dt = 0.5           ; дискретность времени расчета (сек)
x0 = x
repeat ; временной цикл, каждое прохождение цикла длится dt(сек)
  R2=x*x+y*y
  R=sqrt(R2)
  A=GM/R2        ; абсолютное значение ускорения свободного падения, направленного к центру земли
  Ax=-A/R*x      ; Ax и Ay - x и y координаты вектора ускорения
  Ay=-A/R*y

  x=x+Vx*dt +0.5*Ax*dt*dt     ; x и y - новые координаты спутника
  y=y+Vy*dt +0.5*Ay*dt*dt
  R2=x*x+y*y
  R=sqrt(R2)

  Vx=Vx+Ax*dt    ; Vx и Vy - новые значения вектора скорости спутника
  Vy=Vy+Ay*dt
  t= t+dt
  ; для ускорения работы отрисовываем только каждый сотый шаг и шаг, замыкающий орбиту
  if ((round(t) % 100)=0) OR ((x >= 0) and (x0 < 0))
    LineTo(x*scale,y*scale)       ; отрисовка очередного куска орбиты 
    Gra_Clean(2)                  ; стираем предыдущую красную точку 
    Circle(x*scale,y*scale,0.1,2) ; красная точка обозначает позицию спутника 

  breakif ((x >= 0) and (x0 < 0)) or (R*scale>15)

  x0 = x
stop
  breakif Bet > 2*PI

Итак всё готово. Перейдем в режим работы. Стартуем скрипт. После завершения скрипта должны получить картинку: Круговая орбита

Убедились, что спутник движется по круговой орбите. Стоило ли утруждать себя, чтобы получить столь тривиальный результат? Ну по крайней мере мы проверили алгоритм расчета орбиты. Теперь построим более сложную орбиту. Исправим 4-ю строку скрипта вот так

V0 = sqrt(GM/r0) +1000    

Это означает, что в начальной точке скорость спутника на 1000 м/сек больше скорости, соответствующей круговой орбите. Запустите скрипт. Должна получиться такая картинка. Элиптическая орбита

Полный скрипт этого примера смотрите в файле …Vasilisa\Scripts\Graphics_Orbita.txt.