URL: https://linuxfr.org/forums/programmation-c/posts/positions-vitesses-initiales-de-satellites-pour-observer-leurs-trajectoires Title: Positions/vitesses initiales de satellites pour observer leurs trajectoires Authors: BosonXYZT Date: 2023年04月12日T16:08:01+02:00 License: CC By-SA Tags: physique et astrophysique Score: 2 Bonjour, J'ai réaliser un programme permettant la visualisation d'orbite de satellites géostationnaire autour de la Terre, mais malheureusement, je n'arrive pas à obtenir de bonne conditions initiales afin que celui-ci m'offre des résultats cohérent. Pour un système terre/lune, mes CI marchent très bien, mais dès que je passe aux satellites plus rien. J'utilise la méthode de Verlet afin d'obtenir de nouvelles positions en fonction du temps, je me disais aussi que c'était peut être le pas de temps qui était mauvais. Je vous envoie en photo le code, et si jamais quelqu'un aurait une idée sur quoi changer (CI ou pas de temps ou ???) pour obtenir des trajectoires exploitables avec des satellites. En vous remerciant, BosonXYZT ;) Voici mon code (désolé je n'ai pas réussir à mettre de photo) ```c++ #include #include #include #include using namespace std; void Satellites(int& choix, double& m, double& X, double& Y, double& Z, double& VX, double& VY, double& VZ) //fonction définissant la Terre et les satelittes { if (choix == 1) // TERRE { m =5.9736E+24; //masse X=-1.315839435E+11; Y=6.763707294E+10; Z = 4.136174231E+05; //positions initiales VX=0; VY=0; VZ=0; //vitesses initiales } else if (choix == 3) // Lune { m =7.3477E+22; X=-1.319042007E+11; Y=6.786886988E+10; Z =-1.649538549E+07; VX=-614.453; VY=-783.202; VZ=79.439; } else if (choix == 2) // SATELLITES { m =1000; X=-36000000; Y=0; Z =0; VX=0; VY=3074; VZ=0; } else { cout<<"veuillez réessayer"<> N; //on choisit combien de satelittes on veut étudier int choix[N]; double X[N], Y[N], Z[N], VX[N], VY[N], VZ[N], FX[N], FY[N], FZ[N], m[N] ; for (int i = 0; i < N; i++) { cout << "Satellites " << i+1 << endl; do { cout << "choisir :" << endl; cout << "1 : Terre" << endl; cout << "2 : 1 satellites" << endl; cout << "3 : 2 satellites" << endl; cout << "4 : 3 satellites" << endl; cout << "5 : 4 satellites" << endl; cout << "6 : 5 satellites" << endl; cout << "7 : 6 satellites" << endl; cin>> choix[i]; //choix de l'utilisateur } while (choix[i] <1 || choix[i]> 7); Satellites(choix[i], m[i], X[i],Y[i],Z[i],VX[i],VY[i],VZ[i]); } int dt = 100; //intervalle de temps entre chaque point fstream f; //ouverture du ficher où l'on ecrira l'énergie totale ainsi que les aires calculée f.open("etot.txt", ios::out); //on ouvre un fichier pour rentrer les valeurs de l'énergie totale ainsi que celles obtenues avec la loi des aires double C=0; for (int t = 0; t <=3600*24*10; t = t + dt) { Verlet(X,Y,Z,VX,VY,VZ,FX,FY,FZ,m,N,dt); //on appelle l'algorithme de Verlet pour calculer positions et vitesses if (t%10==0) //intervalle de temps pour calculer l'énergie totale ainsi que la loi des aires, on prend tout les points ayant un rest de divisiob euclidienne par 10 égal à 0 { double EC = Ec(VX, VY, VZ, m, N); //on calcul l'énergie cinétique double EP = Ep(X, Y, Z, m, N);//on calcul l'énergie potentielle double Etot = EC + EP; //calcul énergie totale f<

AltStyle によって変換されたページ (->オリジナル) /