//etude d'une orbite avec la methode de Runge //avec frottement //avec animation :-) #include #include #include #include "dislin.h" using namespace std; int main() { //declaration de toutes les constantes que nous allons utiliser dans les caculs const double RT = 6378.; const double GM = 398645.; //G * masse_terre double alt = 1000.; const double R0 = RT + alt; const double V0 = sqrt(GM/R0); const double CX = 0.0015; //coefficient de frottement //declaration du nombre de points et du delat t const double dT = 1.; //pas d'integration const int steps = 50000; //declaration des tableaux pour enregistrer les points calcules pour le satellite double xpos[steps], ypos[steps], xvel[steps], yvel[steps]; //declaration des conditions initiales pour le satellite xpos[0] = R0; ypos[0] = 0.; xvel[0] = 0.; yvel[0] = V0; //animation avec DISLIN metafl("XWIN"); page(3000, 3000); disini(); //initialisation de dislin name("axe-X","X"); name("axe-Y","Y"); //methode de Runge //vitesse initiale en t0 - dt/2 double normR, xacc, yacc; normR = sqrt(xpos[0]*xpos[0] + ypos[0]*ypos[0]); xacc = - GM / (normR*normR*normR) * (xpos[0]-CX*ypos[0]) ; //force ou acceleration yacc = - GM / (normR*normR*normR) * (ypos[0]+CX*xpos[0]); xvel[0] = xvel[0] - xacc*dT/2.; //vitesse yvel[0] = yvel[0] - yacc*dT/2.; //boucle de calcul des vitesses et positions avec la methode de Runge int nsteps = 0; int norbits = 0; for (int i=1; i