IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[C++]La classe particule


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    7
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par d�faut [C++]La classe particule
    Salut a tous,
    Je viens m'adresser � vous car je suis sur que vous allez pouvoir m'aider...

    Je dois cr�er une sorte d'applications grpahique, � base de C++ (sous Borland C++ 6), qui ressemblerait a une fontaine.

    J'ai cr�e une classe Particule, avec diverses m�thodes et attributs, mais je ne vois pas comment je dois proc�der pour faire apparaitre plusieurs jets d'eau successifs....

    Je suis malade, donc peut etre pas trop compr�hensible, mais aidez moi s'il vous plait...Merci beaucoup � vous tous,j'espere que vous pourrez m'aider!

  2. #2
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par d�faut
    Je ne sais pas trop pour ta classe particule, mais moi je vois vaguement comment je ferais une anim de fontaine.
    Admettons que tout parte d'un m�me point, que toutes tes particules ont les m�mes caract�ristiques (une ligne de 2 pixels de longueur et de 1 d'�paisseur par exemple) et qu'elles sont toutes projett�es avec la m�me force. Toutes les 50 millisecondes je tire un angle au hasard et je projette une particule � partir du point avec cet angle et la force de r�f�rence. La particule reste "en jeux" jusqu'� ce qu'elle soit tomb�e hors de la surface d'affichage.
    La petite partie difficile c'est qu'il faut d�goter une formule pour calculer une position dans un plan en prenant en compte la pesanteur, pour �a c'est pas � moi qu'il faut demander , mais �a doit bien se trouver, il y a nottament des faqs consacr�es au maths des jv sur developpez.

  3. #3
    Expert confirm�

    Homme Profil pro
    Ing�nieur syst�mes et r�seaux
    Inscrit en
    F�vrier 2007
    Messages
    4 253
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Ing�nieur syst�mes et r�seaux
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par d�faut
    Pour avoir programm� une simulation de "jet d'eau", je peux dire qu'il existe beaucoup d'autres param�tres.

    En fait, toutes les particules sont "tir�es" (donc avec une vitesse initiale, pas de "force" ici) avec la m�me direction, mais pas du m�me endroit.
    On applique ensuite � chaque particule les forces ad-hoc:
    - Force d'attraction (g), la plus facile.
    - Force de friction de l'air (pour �viter d'avoir une parabole certe tr�s jolie, mais pas du tout r�aliste). A noter que la friction de l'air est plus importante pour les particules "isol�es" (ce qui fait que le "bord" du jet d'eau tombe plus vite que le centre).
    - Force de r�pulsion entre les particules (air d�plac�).
    - Force de tension de surface (qui annule enti�rement la pr�c�dente si la particule est au milieu d'autres particules).
    - Force du vent ?

    La simulation en elle meme est simple (pseudo-code):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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
     
    vector<Particule>   particules;
    while (simulationNotEnded) {
       float deltaT = ... ; // trouver le bon delta-T ici, éventuellement faire un 'sleep' c'est pas mal d'utiliser le deltaT de génération
       generationParticules(particules);
       accelerationParticules(particules);
       deplacement(particules,deltaT);
    }
     
    void generationParticules(vector<Particule>& particules)
    {
       // ajout de X particules répartis sur le disque de tir
       // avec vitesse initiale dans la direction du canon
    }
     
    void accelerationParticules(vector<Particule>& particules)
    {
       // a noter qu'ici "Force" est mal employé, vu qu'on se fiche de la masse des particules, 
       for each Particule p in particules {
          float surrounding = ; // calcul du pourcentage de particules "autour" 0= aucune, 1=partout
          p.force += g; // g vers le bas
          p.force -= p.vitesse * ... * surrounding; // friction de l'air
          for each Particule q in particules {
             if (q != p) {
                 p.force += (p.position - q.position) / distanceCarrée(p.position,q.position) * (1-surrounding);
             }
          }
       }
    }
     
    void deplacementParticules(vector<Particule>& particules, float deltaT)
    {
       for each Particule p in particules {
          float accel = p.force * deltaT;
          p.vitesse += accel ;
          p.position += (p.vitesse + accel * 0.5f)* deltaT; // ici on peut ne pas utiliser l'acceleration, mais je trouve que c'est mieux
          p.force = 0; // on réinitialise les force pour le round suivant
          // on supprime les particules "finies"
          if (p.position est 'out')
              particules.remove(p);
       }
    }
    Bien sur il faut optimiser, par exemple, conserver en harmonique sph�rique la quantit� de particules alentour (et ne la recalculer qu'apres les d�placement), ce qui �vite la boucle en n� pour l'accumulation de forces, utiliser un tableau plutot qu'un vecteur (la construction destruction d'objet / allocation lib�ration m�moire, est ce qu'il y a de plus cher dans une boucle), ce qui permet aussi au passage de s'assurer qu'on ne va pas g�n�rer trop de particules, avoir des particules de taille diff�rente qui se scindent d�s que la tension de surface n'est plus suffisante � les maintenir, ....

  4. #4
    Membre �prouv�
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par d�faut
    En 2d, en 3d ? Autres contraintes ?

Discussions similaires

  1. Classe pour la cr�ation d'un graphe xy
    Par Bob dans le forum MFC
    R�ponses: 24
    Dernier message: 03/12/2009, 17h20
  2. R�ponses: 31
    Dernier message: 30/03/2006, 16h57
  3. �laboration de classe
    Par il_a_ri dans le forum Langages de programmation
    R�ponses: 6
    Dernier message: 16/01/2003, 14h22
  4. Variable d'une Classe Anc�tre
    Par G�nie dans le forum Langage
    R�ponses: 3
    Dernier message: 18/09/2002, 19h24
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    R�ponses: 13
    Dernier message: 03/07/2002, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo