#include "stdlib.h" #include #include "math.h" #define NewtonG 6.67e-11 #define MassE 5.972e24 #define RadiusE 6.371e6 #define RadiusMoon 1.7374e6 #define InitialVel 1.67e3 //~2400/2+460 using namespace std; int main () { double height[2], vel[2]={0.,0.}, accel, gLittle, time, timeStep, mass[2], dmOdt, dynamicMass[2]; height[0] = 0.0; vel[0] = InitialVel; accel = 0.0; gLittle = 9.8; time = 0.0; timeStep = 0.1; mass[0] = 2.95e6;//3.58e6 + 1.32e6; //all #'s from https://en.wikipedia.org/wiki/SpaceX_Starship mass[1] = 1.31e5+41000;//180.e3 + 120.e3; dmOdt = -3.5e7 / (260. * gLittle); //p.11 of https://ocw.mit.edu/courses/aeronautics-and-astronautics/16-07-dynamics-fall-2009/lecture-notes/MIT16_07F09_Lec14.pdf (6.5,380) dynamicMass[0] = mass[0]; dynamicMass[1] = mass[0]; while ( height[0] < 2e6 ) { //(384.4e6-(RadiusE+RadiusMoon)) ) { gLittle = NewtonG * MassE / ( (RadiusE+height[0]) * (RadiusE+height[0]) ); accel = -dmOdt*(vel[1]/dynamicMass[0]) - gLittle; vel[1] = vel[0] + timeStep * accel; height[1] = height[0] + timeStep * vel[1]; time += timeStep; if ( dynamicMass[1] > mass[1] ) { dynamicMass[1] = dynamicMass[0] + dmOdt * timeStep; //dmOdt /= 1.; } else dmOdt = 0.0; cout << time << "\t" << height[1] << "\t" << vel[1] << "\t" << (vel[1]-vel[0])/timeStep << "\t" << dynamicMass[1] << "\t"; if ( vel[1] > 11186. ) cout << "ESCAPE!" << endl; else cout << endl; height[0] = height[1]; vel[0] = vel[1]; dynamicMass[0] = dynamicMass[1]; } return 1; }