Equations physique / mouvements
Bonjour !
Pour l'instant, je fais un calcul de vitesse/position comme si je n'avais aucune force autour de moi:
Code:
1 2 3 4 5 6 7 8
| inline const double Physics::velocity(const double& a, const double& dt, const double& v)
{
return (a * dt) + v;
}
inline const double Physics::position(const double& a, const double& dt, const double& v, const double& p)
{
return (a * dt*dt) / 2) + (v * dt) + p;
} |
Ca marche bien pour accelerer, la vitesse maximale est gerée par une simple constante.
La est le probleme !
Code:
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
|
// dans le header
/* real position */
double x;
double y;
/* base */
double ya; // acceleration
double yt; // time
double yv; // velocity
double xa;
double xt;
double xv;
/* max velocity*/
double mxv;
double myv;
// la fonction qui met a jour la position
void Physics::move()
{
int t = clock(); // on récup le temps actuel (pour delta temps (t-xt))
x = position(xa, t-xt, xv, x); // on calcule la position en abs
y = position(ya, t-yt, yv, y); // on calcule la position en ord
xv = (xa > 0) ? (velocity(xa, t-xt, xv) >= mxv) ? mxv : velocity(xa, t-xt, xv) // mouvement vers la droite
: (velocity(xa, t-xt, xv) <= -mxv) ? -mxv : velocity(xa, t-xt, xv); // mouvement vers la gauche
yv = (velocity(ya, t-yt, yv) >= myv) ? myv : velocity(ya, t-yt, yv);
xt = t; // et hop on met le temps a jour
yt = t;
} |
Je voudrais transformer ces equations/ce code en ajoutant une force venant du sol (une constante de signe inversée par rapport au signe de mon acceleration ?) pour que
- la vitesse maximale soit calculée aussi en fonction de cette force
- que si mon acceleration devient nulle, la force prend le dessus doucement, et alors j'ai une deceleration !
Quelqu'un saurait me dire quel chemin suivre ? :o