Как добавить сюда влияние силы солнечного ветра на спутник? uses Graph3D;
var x,y,z : real; // координаты спутника
x0,y0,z0: real; // координаты планеты
vx,vy,vz: real; // проекции скорости
ax,ay,az: real; // проекции ускорения
r,r3 : real; // расстояние от центра планеты
var M:=5.97E24; // масса Земли
G:=6.6743E-11; // гравитационная поcтоянная
Re:=6.371E6; // радиус Земли
GM:=M*G/Re/Re; // нормировка силы притяжения Земли
dt := 3E-3;
begin
View3D.BackgroundColor := Colors.Black;
View3D.ShowGridLines :=False;;
var Earth := Sphere(0,0,0,1,Colors.Wheat);
Earth.Material := ImageMaterial('Earth.jpg');
Earth.Rotate(V3D(0,1,0),-23.0); //Поворот оси Земли
var an:=Earth.AnimRotate(0,0,1,360,24).Forever; //Анимация вращения Земли
var Back:=Rectangle3D(0,-7,0,100,70,V3D(0,1,0),ImageMaterial('Stars2.png'));
Back.Rotate(V3D(1,0,0),30.0);
an.Begin;
x:=2; //Начальная координата (два радиуса Земли)
y:=0;
z:=0;
vx:= 0;
vy:= -sqrt(GM/2); //Первая космическая скорость (орбита круговая)
vy:= 1.2*vy; // орбита эллиптическая
vz:=0;
var Sputnik:=Sphere(x,y,z,0.1,Colors.white+EmissiveMaterial(Colors.silver));
repeat
r:=sqrt(sqr(x-x0)+sqr(y-y0)+sqr(z-z0));
r3:=r*r*r;
// проекции ускорения
ax:=-GM*(x-x0)/r3;
ay:=-GM*(y-y0)/r3;
az:=-GM*(z-z0)/r3;
// проекции скорости
vx:=vx+ax*dt;
vy:=vy+ay*dt;
vz:=vz+az*dt;
//segment3d(P3D(x,y,z),P3D(x+vx*dt,y+vy*dt,z+vz*dt),1.5,Colors.green);//косяк!
// координаты спутника
x:=x+vx*dt;
y:=y+vy*dt;
z:=z+vz*dt;
sputnik.MoveTo(x,y,z);
sleep(1);
until x>100;
end.