Я давно это делал вот фрагмент того как я реализовал гравитационное воздействие на кораблик (вырезано из общего кода):
Function FaindObjGrav(p.Player)
;Расчет гаравитационного воздействия на корабль
If TimMS<MilliSecs() Then
TimMS=MilliSecs()+C_Strob
Obj=FaindDist(p)
Di1#=EntityDistance# ( p\entity,planet(obj))
A#=C_Koef*C_Grav#*(o.sb(Obj)\Mass/(Di1#*Di1#*1000000)) ;Домнажаю радиус на милион чтоб было норм в КМ
vx#=EntityX#(planet(obj),True)
vy#=EntityY#(planet(obj),True)
vz#=EntityZ#(planet(obj),True)
vx# = vx#/Di1#: vy# = vy#/Di1#: vz# = vz#/Di1#
p\speedx#=vx#*A#+p\speedx#
p\speedy#=vy#*A#+p\speedy#
p\speedz#=vz#*A#+p\speedz#
TranslateEntity p\world,-p\speedx#,-p\speedy#,-p\speedz# ;move world
End If
End Function
Function FaindDist(p.Player)
;Функция поискаближайшего объекта
Dist#=EntityDistance#( p\entity,planet(i))
For i=0 To NumPlanet-2
Di1#=EntityDistance#( p\entity,planet(i))
Di2#=EntityDistance#( p\entity,planet(i+1))
If (Dist#>Di1# Or Dist#>Di2#)
If Di1#<=Di2#
Dist#=Di1#
Obj=i
Else If Di2#<Dist#
Dist#=Di2#
Obj=i+1
EndIf
EndIf
Next
Return Obj
End Function
Это точно работало и работало как реальная физика... Нужно занть массу планеты массу корабля...
Функция FaindDist анализировало ближайшее крупное тело в космосе т.е. А FaindObjGrav уже расчитывало ускорение которое задовалось телу...
ВОбщем эими двумя функиями мне удалось сделать модель при которой можно было выводить корабль на орбиту и он уже по законами притяжения мог вращаться по орбите.
Есть одно но, я это делал для Солнечной системы в натуральную величину и поэтому пришлось делать финт ушами: Сам корабль всегда имел координату 0,0,0 а двигал я в сцене все небесные тела.