| 12
 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;
} |