Balle et physique

cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 14 juin 2005 à 18:16
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 17 juin 2005 à 00:48
salut a tous

voila j'aimerais bien faire un programme dans lequel on voit une balle qui se deplace avec le plus de réalisme possible
pour sa j'ai eu un idée. si par exemple je fais une liste chainé pour chaque balle dans laquelle je mettrais toute les forces qui s'applique sur la balle et que je fais la somme de ces vecteurs pour avoir la vitesse de la balle.
est-ce que c'est a peu près logique du point de vu physique ? ou est-ce que c'est complètement absurde ?
sinon est-ce que vous pensez que sa rendra bien ?
et comment vous faites vous ?

si qq1 connait des url ou il explique comment faire un moteur 3d simplifié ...

merci

21 réponses

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
14 juin 2005 à 18:49
Bé, on part du principe qu'il ne peut y avoir qu'une seule force sur ta balle ( sans viteses initiale je parle ) donc il n'y a que le poids...

Mais le problème, c'est pas les forces, c'est surtout l'énergie...
Energie potentielle = mgh ( Masse * Gravité * Hauteur )
Energie Cinétique = .5mv² ( .5*Masse*Vitesse² )

Si tu veux voir rebondir une balle, il faut prendre en compte l'energie potentielle... ( Hauteur )
En sachant également que l'énergie Mécanique ( Ep + Ec ) est constante...
Fin c'est assez casse couille comme truc lol

Merci à toi de me faire révisé la physique :)


void Aurevoir( void ); //Bonne journée
0
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
14 juin 2005 à 18:57
bin non c pas trop logique pour trouver les vecteur vitesse c pas comme ca qu on sy prend.
tu peux utiliser la 2 eme loi de newton :
somme des force = masse * acceleration.

tu trouve les forces en fonction de l acceleration.
apres vu que a=dv²/d²t tu integre les force = a a pour trouver la vitesse.
si tu veux l equation horaire tu reintegre ta vitesse.
n oublie pas les var d integration qui sont les pts de depart et le V0 selon le cas

exemple:

poid=ma
-mg=ma
-g=a

on integre a a (on fait 2 equation en x et y )
Vy=-gt+V0y
Vx=V0x

on reintegre:

y=-1/2 gt² + V0yt +y0
x=V0xt +x0

voila
0
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
14 juin 2005 à 18:59
386015 Joky y a conservation de l energie si tu compte pas les frottements sur la boalles ni la pousse d archimede et a ce moment em ! = ec+ep
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
14 juin 2005 à 19:02
Ouai mé une balle de masse non négligeable, tu peux qd mm viré la poussée d'archimède lol...
Par contre si tu prend en compte, les frottements, ca rentre vraiment dans un truc very complexe lol, autant codées une listbox et lui rajouté des items c'est plus simple mdr


void Aurevoir( void ); //Bonne journée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
14 juin 2005 à 20:07
Parle pas de liste chainée, mais de vector (#include <vector>).
Sinon j'avais fais un début de moteur physique, tu peux aller voir, tu
auras normalement les réponses à tes questions:

http://www.cppfrance.com/code.aspx?ID=27055



en fait c'est relativement proche de ce que tu veux faire. Va voir
notamment la class particule. Mais surtout dans la fonction d'affichage
OpenGL dans le main.cpp ou tu trouveras comment je fais à partir des
forces pour avoir les vitesses et positions (ca s'appelle
l'approximation d'Euler) ca marche bien.



xboxut, ce que tu dis ne peut pas s'appliquer. Ca marche que si tu as
le poids, mais il n'y a pas que le poids ! ou sinon c'est bidon. Des
que tu as d'autre force qui dépendent des positions, ben regarde
comment j'ai fais.



aller ++
0
z189632 Messages postés 11 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 9 septembre 2008
14 juin 2005 à 20:30
bnjour a tous !!

-=<( Z )>=-
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
14 juin 2005 à 23:30
luthor
deja pourquoi je doit pas parler de liste chainé ? , c'est bien des liste que j'utilise ( #include <list> )
sinon merci pour le lien j'ai regarder un peu ta source, sa ma l'air compliqué et en ce momment j'ai pas trop le temps => bac

Joky
y a un truc que je comprend pas avec l'energie, comment je peux m'en servir si c'est possible pour obtenir la vitesse ou l'acceleration ?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
14 juin 2005 à 23:56
non mat74, l'énergétique c'est inutilisable, sauf cas particulier très simple.



sinon pour ton truc, je pense que des vector serait mieux adaptés. Il y
aura moins de manipulation de pointeurs par le pc. Donc si tu peux
éviter les list autant le faire.
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
Modifié le 28 août 2021 à 23:09
salut,


dis toi que s'il n'y a pas de frottement, la vitesse horizontale de ta
balle est constante (et oui, la resultante horizontale des forces qui
s'appliquent a ta balle (ya que le poids) est nulle)


en gros voila l'equation parametrique du mouvement de la balle (x et y sont ses coordonnees)


x (t) = V0. cos( theta).t + x0


y (t) = V0. sin(theta).t - 1/2.g.t² + y0





V0 c'est la vitesse initiale a laquelle tu lances ta balle (si elle est
nulle ta balle ne fait que tomber vers le bas ...) et theta c'est
l'angle que fais V0 avec l'horizontal.


Si tu t'amuse a tracer ca sur ta calculatrice tu verras une jolie parabole ....


Tu peux creer deux vecteurs qui contiennent ces coordonnees:



#include <vector>

#include <math.h>

#include 

using namespace std;

const double g = 9.81; // la valeur de g

const double V0 = 5.; // 5 m/s au lancer

const double theta = 3.14/4. ; // un angle de Pi/4

const double X0 = 0.;

const double Y0 = 2.; // 2 m de haut au debut

const double T = 1.5; // on regarde ce qui se passe pendant 1.5 seconde

const double pas = 1. / 100.;  // 100  points pour une seconde de mouvement


int main(int arc, char* argv[])

{

    vector<double> x, y;

    const int n = (int) (T / pas); // le nombre de points


    x.resize(n); // petite optim ...


    y.resize(n);


    for (int i = 0; i < n ; i++)

    {

        double t = i*pas; // le temps

        x[i] = V0 * cos(theta) * t + X0;

        y[i] = V0 * sin(theta) * t - 0.5*g*t*t + Y0 ;

        cout << "t = " << t << " : coordoonnees de la
balle ( " << x[i] << " ; " << y[i] << " )" 
<< endl;

    }

    // utilise les vecteur x et y qui contiennent les coordonnees de la balle


    return 0;

}


a+
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
15 juin 2005 à 22:54
luthor
en fait j'utilise ma propre classe vecteur, c'est pour sa qu'il me faut des listes chainé
je trouve que c'est mieu comme sa je sais exactement a quoi serve les fonctions je peux même les modif un peu pour les besoins de mon prog. bien sur je me doute bien que c'est moin rapide mais a mon avis c'est pas significatif vu que mon projet n'est pas tres important

cosmobob
oui mais les équations paramétriques ne me serve a rien puisque je n'est pas t
j'ai juste delta_t
donc il faut que je calcul tout juste en fonction de l'image précedente

sinon j'ai une autre question
comment je peux calculer une integrale ?
parce que vu que la position est la primitive de la vitesse et que j'ai vu un truc en math qui dit sa en gros : l'integrale de 0 a x de f(t)dt = F(x)

sinon j'ai trouvé un truc sur les collisions avec les murs ( forces infini ) mais ou est-ce que je peux trouver les coefficients pour dire comment la vitesse atténué en frappant un mur ?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 juin 2005 à 00:20
Oula, c'est bien plus compliqué que ca. Deja laisse tomber le calcul d'une intégrale. C'est pas gérable pour ton prog.

Ce qu'il faut que tu fasses, c'est ca:

Deja,



accélération = 1/masse * ( sommes des forces )



puis apres tu obtiens:

vitesse = vitesse avant + accélération * delta_t



puis la position:

position = position avant + vitesse * delta_t

Ca c'est l'approximation d'euler que j'utilise dans mon programme.





Pour les collisions, il faut connaitre un vecteur normal à la surface
de contact, et partir de la, tu fais une symétrie du vecteur vitesse
par rapport au vecteur normal. Ca, c'est le rebond classique, sans
atténuation de vitesse, c'est un choc élastique. La matériau "n'absorbe
pas d'énergie". Mais ca marchera pas pour faire une balle qui rebondit
par terre. Enfin avec les frottements de l'air, elle s'arretera à la
fin, mais au bout d'un long moment.



Bon aller demande des détails si tu veux. ++
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
16 juin 2005 à 07:14
donc sa veux dire que accélération = g = 9.81

pour les collisions avec les murs c'est bon j'utilise la formule :
nouvelle_vitesse = vitesse - normal*2*(vitesse*normal);
le pb c'est que la balle rebondira de la même façon qq soit le mur
ouai et pour un rebond avec le sol elle ne s'arretera jamais (sauf si frottement)
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 juin 2005 à 10:25
accélération = 9.81 si tu mets que la gravité.



Pour les collisions, tout le monde utilise ca en gros. Si tu veux autre
chose, soit tu cherches une modélisation du rebond deja existante sur
le net. Soit tu créés une modélisation toi meme.
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
16 juin 2005 à 12:34
okay
encore une question
c'est koa une modélisation ?
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
16 juin 2005 à 13:39
mer**
je viens de rencontrer un autre pb
j'ai mis tout sa en place ( l'acceleration + la gravite ) mais y a un truc de pas normal . si je place la balle sans vitesse initiale, elle descend rebondi qq fois sur un mur en dessous ( j'ai mis un coeff de 0.7 comme sa sa dure pas trop longtemps ) et elle passe a travers le mur
faudrai pas rajouter la reaction normal du mur comme force ?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 juin 2005 à 13:43
Tu veux mettre quoi comme force pour la reaction normal ? C'est
impossible de définir une force pour ca. Mais elle passe à travers
quand ? A la fin ? Ou des le premier rebond ?
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
16 juin 2005 à 17:24
en fait elle passe a travers a partir du moment ou la force de gravité est plus grand que la vitesse cad au bout de 3-4 rebonds
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 juin 2005 à 20:30
Mais la gravité est constante. T'as du faire une erreur de détection de collision.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 juin 2005 à 20:31
Si t'as encore des problèmes et que tu veux de l'aide, post un nouveau
message, car la c'est é&"'(&é"' d'aller chercher ce post :)
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
16 juin 2005 à 23:01
1 dernier

non en fait je me suis mal exprimé c'est la vitesse qui diminue et qui fini par etre + petit que la gravité
0
Rejoignez-nous