1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| #include <iomanip>
#include <iostream>
#include <math.h>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
using namespace std;
int main()
{
// Paramètres physiques.
const int MF=3037000; // Masse totale de la fusée [kg].
const int DMAS=5200; // Débit massique [kg/s].
const int VEJECT=2250; // Vitesse d'éjection des gaz [m/s].
double MT; // Masse de la Terre [kg].
MT=5,98*pow(10,24);
const long RT=6378000; // Rayon de la Terre [m].
double G;
G=6,67*pow(10,-11); // Constante de gravitation universelle [m^3/s^2*kg].
// Compteurs.
int i=0; // Compteur.
int n; // Numéro de l'élément échantillonné.
int N=10000; // Nombre d'éléments dans les tableaux.
// Variables physiques.
double temps; // Temps actuel [s].
double t[N]; // Tableau des temps [s].
double delta_t[N]; // Tableau des différences de temps [s].
double y[N]; // Altitude de la fusée [m].
double v[N]; // Vitesse de la fusée [m/s].
double a[N]; // Accélération de la fusée [m/s^2].
// Création de la fenêtre.
sf::RenderWindow App(sf::VideoMode(800, 600), "Lancement d'une fusee");
sf::Font Arial;
if (!Arial.LoadFromFile("arial.ttf"))
return EXIT_FAILURE;
// Initialisation des variables.
sf::Clock Clock;
t[0] = 0;
delta_t[0] = 0;
y[0] = 0;
v[0] = 0;
a[0] = (DMAS*VEJECT)/(MF-DMAS*t[0])-((G*MT)/pow((RT+y[0]),2));
n = 1;
// Début de la simulation.
while (App.IsOpened())
{
sf::Event Event;
while (App.GetEvent(Event))
{
if (Event.Type == sf::Event::Closed)
App.Close();
}
App.Clear();
temps = Clock.GetElapsedTime(); // Mesure du temps.
if (i==9) // Échantillonnage des données (1:10).
{
t[n] = temps;
delta_t[n] = t[n] - t[n-1];
y[n] = v[n-1]*delta_t[n-1] + y[n-1];
v[n] = a[n-1]*delta_t[n-1] + v[n-1];
a[n] = (DMAS*VEJECT)/(MF-DMAS*t[n])-((G*MT)/pow((RT+y[n]),2));
cout << "Interieur : t["<< std::fixed << setprecision (5) << n<<"]= "<<t[n]<<" delta t= "<<delta_t[n]<< " y= " << y[n] <<" v= "<<v[n]<<" a= "<<a[n]<< endl<<endl;
n++;
i=0;
}
i=i++;
// Test : Les valeurs affichées ici ne sont pas les mêmes que celles qui sont affichées dans le IF.
cout << "Exterieur : t["<< std::fixed << setprecision (5) << n<<"]= "<<t[n]<<" delta t= "<<delta_t[n]<< " y= " << y[n] <<" v= "<<v[n]<<" a= "<<a[n]<< endl;
// Réafficher la fenêtre entière.
App.Display();
}
return 0;
} |