//etude d'une orbite avec la methode de Runge //la loi gravitationelle n'est pas necessairement 1/r^2 #include #include #include "dislin.h" using namespace std; int main() { const int steps = 50000; const double GM = 1.; double xpos[steps], ypos[steps], xvel[steps], yvel[steps]; //conditions initiales xpos[0] = 2.0; ypos[0] = 0.0; xvel[0] = 0.0; yvel[0] = 0.5; //nouvelle loi gravitationelle const double beta = 2.1; //exposant loi gravitationnelle double dT = 0.002; //pas d'integration //animation avec DISLIN metafl("XWIN"); page(3000, 3000); disini(); //initialisation de dislin name("axe-X","X"); name("axe-Y","Y"); titlin("Deviation de la loi de Newton 1/r2",1); //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/pow(normR,beta) * xpos[0]/normR; //force ou acceleration, GM = 1 yacc = - GM/pow(normR,beta) * ypos[0]/normR; xvel[0] = xvel[0] - xacc*dT/2.; //vitesse yvel[0] = yvel[0] - yacc*dT/2.; for (int i=1; i