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);
}
} |
Partager