//pendule elastique #include #include #include #include "dislin.h" //bilbiotheque DISLIN using namespace std; int main() { const int STEPS = 10000; double dT = 0.005; double angle[STEPS], longueur[STEPS], temps[STEPS]; double vitA[STEPS], vitL[STEPS], accA[STEPS], accL[STEPS]; double energie[STEPS]; //parametres du pendule double L0 = 1.; //longueur a repos du ressort en metres double k = 2.; //constante elastique du ressort en N/m double g = 9.81; //acceleration gravitatinelle double m = 0.1; //masse cout <<"**********************************************************\n"; cout << "Nous avons un pendule avec un ressort au lieu d'une corde.\n" << "La longueur a repos du ressort est " << L0 << " m et\n" << "la constante elastique est " << k << " N/m.\n" << "La masse est " << m << " kg.\n" << "On assume que l'oscillation demarre depuis l'etat de repos\n" << "a un certain angle et elongation initiales.\n\n"; cout << "Quelle est l'angle initial du pendule ? "; cin >> angle[0]; cout << "Et l'elongation initiale du ressort en metres ? "; cin >> longueur[0]; int opt; do { cout << "Que type de graphique souhaitez-vous ?" << endl; cout << "1 pour dessiner un graphique" << endl; cout << "2 pour une animation du mouvement du pendule" << endl; cin >> opt; cout << endl; } while (opt!=1 && opt!=2); temps[0] = 0.; angle[0] *= M_PI/180.; //ces vecteurs vont etre utilises avec DISLIN double x[STEPS], y[STEPS]; x[0] = sin(angle[0])*longueur[0]; y[0] = -cos(angle[0])*longueur[0]; vitA[0]=0.; vitL[0]=0.; accA[0] = -1.*sin(angle[0])*g/longueur[0]; accL[0] = cos(angle[0])*g - k*(longueur[0]-L0)/m; energie[0] = m*g*y[0] + k*(longueur[0]-L0)*(longueur[0]-L0)/2.; cout << "L'energie initiale du systeme est : " << energie[0] << endl; //initialisation de DISLIN metafl("XWIN"); //XWIN ou PDF disini(); //methode de Runge for (int i=0; i