Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - Deimos

Pages: [1]
1
Graphique / Capture vidéo d'une simulation C++/SFML
« le: Septembre 27, 2014, 03:59:46 pm »
Bonjour,

  Je voudrais savoir s'il est possible de sauvegarder une simulation C++/SFML sous forme d'un fichier vidéo (avi, mpeg).

  J'ai lu que le programme MotionNET permet d'importer un fichier vidéo (https://gist.github.com/rcurtis/c78d5f33b9fe9f0ef66e) mais je n'ai pas vu d'exemple dans lequel on crée un fichier vidéo à partir d'un programme C++/SFML.

Merci

2
Graphique / [RESOLU] - Affichage de variables
« le: Septembre 05, 2014, 06:05:26 pm »
Bonjour,

  J'ai débuté l'apprentissage du langage C++ il n'y a pas très longtemps. Mon but est d'effectuer de petites simulations avec SFML 1.6.

  J'ai réussi a réaliser une partie du programme que je veux faire en lisant la documentation ici. Je suis maintenant confronté à une plus grande difficulté. Je n'ai pas vu d'exemple de ce genre.

  Je voudrais savoir comment afficher, en temps réel, la valeur des différentes variables (t, y, v et a) dans la fenêtre supérieure gauche. Par exemple, comment afficher le temps au dixième de seconde près et l'altitude correspondante avec une décimale?

 Merci

#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <math.h>
#include <SFML/Audio.hpp>
#include <SFML/Window.hpp>
#include <SFML/Window/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
#include <SFML/Graphics/Font.hpp>
#include <SFML/Graphics/Glyph.hpp>
#include <SFML/Graphics/Rect.hpp>
#include <SFML/Graphics/Sprite.hpp>
#include <SFML/System/Resource.hpp>
#include <SFML/System/Vector2.hpp>
#include <SFML/System/Unicode.hpp>

using namespace std;

int main()
{

// Paramètres de la fenêtre principale.

   int XM=240;    // Largeur en pixels selon x de la fenêtre de données.
   int YM=480;    // Hauteur en pixels selon y de la fenêtre de données.

// Paramètres physiques.

   const int MF=3000000;      // Masse totale de la fusée [kg].
   const int DMAS=13500;      // Débit massique [kg/s].
   const int VEJECT=2500;     // 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].

// Ouverture du fichier saturn.txt.

   ofstream outputFile;
   outputFile.open("saturn.txt");

// 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;

   sf::Shape Rect1 = sf::Shape::Rectangle(0, 0, XM, YM, sf::Color(25, 65, 30));
   sf::Shape Rect2 = sf::Shape::Rectangle(XM, 0, 800, YM, sf::Color(20, 25, 200));
   sf::Shape Rect3 = sf::Shape::Rectangle(0, YM, 800, 600, sf::Color(91, 24, 24));

// Initialisation des variables.

   sf::Clock Clock;
   n = 0;
   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));

// Écriture du titre et des premières données dans le fichier saturn.txt.

   outputFile << "t[n]     y[n]     v[n]      a[n]"<< endl << endl;
   outputFile << std::fixed << setprecision (2) << t[0]<<"    "<< y[0]<<"    "<< v[0]<<"    "<<a[0] << endl;

// 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==99)   // Échantillonnage des données (1:100).
    {
     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 << "t["<< std::fixed << setprecision (2) << n<<"]= "<<t[n]<<"  delta t= "<<delta_t[n]<< "   y= " << y[n] <<"   v= "<<v[n]<<"   a= "<<a[n]<< endl<<endl;
     outputFile << std::fixed << setprecision (2) << t[n]<<"    "<< y[n]<<"    "<< v[n]<<"    "<<a[n] << endl;
     n++;
     i = 0;
    }
    i++;

 // Affichage des fenêtres et du contenu à l'intérieur.

    App.Draw(Rect1);
    App.Draw(Rect2);
    App.Draw(Rect3);
    sf::String Titre1("Donnees", Arial, 25);
    sf::String Texte11("Temps (s)     :", Arial, 15);
    sf::String Texte12("Altitude (km) :", Arial, 15);
    sf::String Texte13("Vitesse (m/s) :", Arial, 15);
    sf::String Texte14("Acceleration (m/s^2) :", Arial, 15);
    Titre1.Move(50.f, 20.f);
    Texte11.Move(20.f, 80.f);
    Texte12.Move(20.f, 120.f);
    Texte13.Move(20.f, 160.f);
    Texte14.Move(20.f, 200.f);
    sf::String Titre2("Simulation graphique", Arial, 25);
    Titre2.Move(400.f, 20.f);
    sf::String Titre3("Messages", Arial, 25);
    Titre3.Move(350.f, 500.f);
    sf::String Texte30("La fusee vient de decoller.", Arial, 15);
    Texte30.Move(30.f, 550.f);
    sf::String Texte31("La fusee a atteint l'altitude de 1 km.", Arial, 15);
    Texte31.Move(30.f, 550.f);
    sf::String Texte32("Limite d'Armstrong atteinte (18,9 km).", Arial, 15);
    Texte32.Move(30.f, 550.f);
    sf::String Texte33("La fusee a atteint l'ionosphere (85 km).", Arial, 15);
    Texte33.Move(30.f, 550.f);

    App.Draw(Titre1);
    App.Draw(Texte11);
    App.Draw(Texte12);
    App.Draw(Texte13);
    App.Draw(Texte14);
    App.Draw(Titre2);
    App.Draw(Titre3);

 // Affichage des messages dans la fenêtre du bas.

    if (y[n-1] < 1000)
     App.Draw(Texte30);
    else
     if (y[n-1] < 18900)
      App.Draw(Texte31);
      else
       if (y[n-1] < 85000)
        App.Draw(Texte32);
    ;

 // Réafficher la fenêtre entière.

    App.Display();
}
        return 0;
}
 

Pages: [1]
anything