CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

gravitée, facteur de réduction

farfadetsan
farfadetsan
Niveau 6
20 septembre 2006 à 21:26:31

hello !

Bon voila je fé un jeu de volley en SDL ( c++ ), et en fait je voudrai faire sauter mes ptis joueurs. Pour simuler ca j´ai besoin de la force d´atraction des joueurs vers le sol ( disons 800 newtons ) ( hé oui des joueurs barakés :p) ) et aussi du facteur avec lequel ils ralentissent leur assention pour enfin redescendre... ( force d´inertie ? )

Une espece de fonction dans laquelle je rentre la force du saut et qui me fait sauter mon joueur avec réalisme :-)

Si vous avez une solution dites la svp !

bye.

Fvirtman
Fvirtman
Niveau 10
20 septembre 2006 à 22:08:45

Utilise la physique de Newton, avec la formule :
F = ma.

avec cela, et en prenant comme force :
- la force de gravité
- une force ponctuelle (l´impact) au moment ou tu fais le saut

Tu fais ça de façon parfaite... (car c´est la vraie simulation physique)

Fvirtman
Fvirtman
Niveau 10
20 septembre 2006 à 22:39:55

Bon, allez, une fonction :

double GetY(double y0,double v0,double t)
{
return -9.81*t*t+v0*t+y0;
}

tu lui donnes
y0 = position y du sol.
v0 = vitesse initiale de départ (positif : plus cest grand, plus le mec a mis une impact forte)
t = temps en secondes depuis le début du saut.

--> GetY te donne la position y du gars t secondes apres le début du saut.
Tu veux savoir ou il est a 0.5 secondes : tu donnes t=0.5...

Cela te garantie un beau saut en cloche.
(le jour ou tu veux qu´il saute sur Mars, et non sur Terre, tu changes le -9.81 qui est la constante de gravité terrestre)

farfadetsan
farfadetsan
Niveau 6
21 septembre 2006 à 13:00:43

merci !

Pour tout dire je suis en 2nd et la gravité...je connait pas trop :-)

désolé j´avé oublié que la gravitée n´avé pa de raport avec la masse...donc en fait on s´en fou un peu du poid du joueur...

Sinon pour ta fonction je ne doute pas de son éficacité, j´aimerai seulement que tu m´éxplique son fonctionement ( ca me plait pas d´utiliser quelque chose que comprend pas :-d ) avec pour base mes faibles competences dans ce domaine :-)

et pour info mon jeu de volley se déroule sur la planette bleu donc je reste a 9.81 :fier:

Fvirtman
Fvirtman
Niveau 10
21 septembre 2006 à 13:23:22

Il faut que tu fasses l´analogie avec une fonction mathématique ! (si tu es en seconde, tu connais au moins les équations de droite, voir directement les fonction !)

Si je te dis :
y = f(x)

ça te dis quelque chose je pense !

Donc en fait, la c´est pareil :

double y = GetY(t)
(les autres parametres sont des constantes de départ)

Un exemple d´utilisation : (formel, je ne fais pas gaffe a la syntaxe rigoureuse)

unsigned long t0 = SDL_getTicks()/1000.0;
--> Temps initiale : départ du saut.

SDL_Surface* ballon; // a toi d´y charger.
SDL_rect R;
R.x = 100;
R.w = 10;
R.h = 10;
doubel v0 = 10.0;
while(1)
{
double temps_depuis_depart = SDL_getTicks()/1000
.0 - t0;
R.y = (int)GetY(100.0,v0,temps_depuis_depart);

SDL_BlitSurface(screen,NULL,ballon,&R);
}

Normalement, si tu développes ça, tu dois voir un ballon qui fait un mouvement de cloche. (il est possible que ça le fasse a l´envers (balle attirée vers le haut) Je te laisse inverser -9.81 en +9.81 et v0 en -v0 si c´est le cas.

farfadetsan
farfadetsan
Niveau 6
21 septembre 2006 à 13:50:10

Désolé en fait c´était pas vraiment ca que je voulé que tu m´éxplique :lol:

En fait ce que j´ai pas compri c´est pourquoi -9.81*t*t+v0*t+y0 ?? ? :question:

9.81 ca je sais ce que c´est, mais pourquoi le multiplier par le temp au carré et aditionner le tout avec la vitesse de départ multipliée par le temp ?

Meme si ca marche j´ai du mal a comprendre pourquoi.

Fvirtman
Fvirtman
Niveau 10
21 septembre 2006 à 14:02:13

hum ! ça me rappelle que j´ai oublié un facteur /2.

Alors voila : Selon Newton :

F = ma

--> l´ensemble des forces est égal a la masse que multiplie l´accélération.
donc

a = F/m
--> si tu connais l´ensemble des forces appliquées sur une masse m, tu peux calculer le vecteur accélération.

de la, tu primitives (tu verras ça plus tard) pour avoir la vitesse :
tu obtiens :

v = (F/m)*t + v0
--> la vitesse du systeme a un instant t est égale a (F/m)*t + v0
(v0 étant la vitesse au temps 0 : en effet, si, lorsque tu commences a mesurer l´évolution, ton systeme a déja une vitesse : ça s´accumule)
Dans la cas de ton ballon de volley, on donne un v0, car a t=0, tu donnes une vitesse instantanées a ton ballon (l´impact)

Si tu veux la position, tu primitives encore. Et tu obtiens :

x = (F/m)*t²/2 + v0*t + x0.
(tu remarques que j´ai oublié le /2 en haut)
(x0 est la position au départ : en effet, si tu pars de 0 metres, ou de 300 metres, alors forceménet, au temps t, la position sera différente (300m plus loin du coup, donc +x0)

ça, ça marche dans TOUS LES CAS.

a = F/m
v = (F/m)*t + v0
x = (F/m)*t²/2 + v0*t + x0.

Maintenant pour ton cas :
que vaut F ?

la seule force appliquée a ton systeme est la gravité. (on néglige les frottements)
Donc :

F = g

La gravité est :

g = G*m
(G = constante de gravité, en fonction de la planete sur laquelle tu es, tu changes...)

ici donc :

g = -9.81*m

du coup F = -9.81*m

si on regarde maintenant l´équation de la position :

x = (F/m)*t²/2 + v0*t + x0.
ça donne :

x = (-9.81*m/m)*t²/2 + v0*t + x0.
<=>
x = (-9.81)*t²/2 + v0*t + x0.

CQFD (j´avais juste oublié le /2 )

la c´est gentillet car on a juste la gravité, pas de frottements, et surtout la force est constante ; car si elle dépendait de t, ce serait + difficile a primitiver.

farfadetsan
farfadetsan
Niveau 6
21 septembre 2006 à 18:09:20

Merci !! ! :ange: j´ai ( presque ) tout compris.

Enfin c´est trés bien éxpliqué, merci encore.

bye.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment