Пример для расчета орбиты движения спутника вокруг Земли.
Для понимания этого примера необходимо уметь работать с векторами знать законы равноускоренного движения. Расчеты будем производить в метрах, а рисовать в тысячах километров. Сначала зададим некоторые константы.
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.