DE LOURDES MODIFICATIONS
Je trouve cette question très intéressante car j'ai récemment fait un peu de travail sur la modélisation de projectile de mouvement avec la drague.
Point 1: Vous êtes essentiellement la mise à jour de la position et de la vitesse à l'aide de l' explicite vers l'avant/Euler itération chaque nouvelle valeur pour les etats doivent être en fonction des valeurs anciennes. Dans un tel cas, vous devriez faire la mise à jour de la position de la première, puis la mise à jour de la vitesse.
Point 2: Il y a de plus réaliste des modèles de la physique de l'effet de la traînée de frottement. Un modèle (suggéré par Adam Liss) implique une force de traînée est proportionnelle à la vitesse (connu sous le nom de Stokes' glisser, qui s'applique généralement à une faible vitesse de situations). Celui que j'ai déjà proposé implique une force de traînée est proportionnelle au carré de la vitesse (connu sous le nom quadratique glisser, qui s'applique généralement à haute vitesse situations). Je vais répondre à chacun à l'égard de la façon dont vous déduire des formules pour la vitesse maximale et le temps nécessaire pour atteindre efficacement la vitesse maximale. Je vais renoncer à la complète dérivations, car ils sont plutôt impliqués.
Stokes a glisser:
L'équation de mise à jour de la vitesse:
velocity += acceleration - friction*velocity
qui représente l'équation différentielle suivante:
dv/dt = a - f*v
À l'aide de la première entrée dans cette intégrale de la table, nous pouvons trouver la solution (en supposant que v = 0 à t = 0):
v = (a/f) - (a/f)*exp(-f*t)
Le maximum (c-terminal) de vitesse se produit lorsque t >> 0, de sorte que le second terme de l'équation est très proche de zéro et:
v_max = a/f
Concernant le temps nécessaire pour atteindre la vitesse maximale, remarque que l'équation jamais vraiment atteint, mais au lieu asymptotes vers elle. Toutefois, si l'argument de l'exponentielle est égale à -5, la vitesse est de l'ordre de 98% de la vitesse maximale, sans doute assez proches de la considérer l'égalité. Vous pouvez ensuite approximative du temps maximum de vitesse:
t_max = 5/f
Vous pouvez ensuite utiliser ces deux équations à résoudre pour f et un donné un souhaité vmax et tmax.
Quadratique glisser:
L'équation de mise à jour de la vitesse:
velocity += acceleration - friction*velocity*velocity
qui représente l'équation différentielle suivante:
dv/dt = a - f*v^2
À l'aide de la première entrée dans cette intégrale de la table, nous pouvons trouver la solution (en supposant que v = 0 à t = 0):
v = sqrt(a/f)*(exp(2*sqrt(a*f)*t) - 1)/(exp(2*sqrt(a*f)*t) + 1)
Le maximum (c-terminal) de vitesse se produit lorsque t >> 0, de sorte que l'exponentielle termes sont beaucoup plus grand que 1 et l'équation approches:
v_max = sqrt(a/f)
Concernant le temps nécessaire pour atteindre la vitesse maximale, remarque que l'équation jamais vraiment atteint, mais au lieu asymptotes vers elle. Toutefois, si l'argument de l'exponentielle est égale à 5, la vitesse est d'environ 99% de la vitesse maximale, sans doute assez proches de la considérer l'égalité. Vous pouvez ensuite approximative du temps maximum de vitesse:
t_max = 2.5/sqrt(a*f)
ce qui est aussi équivalent à:
t_max = 2.5/(f*v_max)
Un vmax et tmax, la deuxième équation pour tmax vous dira que f doit être, et alors que vous pouvez brancher que dans l'équation de vmax pour obtenir la valeur de un.
Cela me semble un peu exagérer, mais ce sont en fait certains des façons les plus simples de modèle de glisser! N'importe qui qui vraiment veut voir les étapes d'intégration peut tirer sur moi un email et je vais vous les envoyer. Ils sont un peu trop impliqué de type ici.
Un autre Point: je n'ai pas tout de suite compte, mais la mise à jour de la vitesse n'est plus nécessaire si vous utilisez les formules que je dérivée de v(t). Si vous êtes tout simplement la modélisation de l'accélération de repos, et vous gardez une trace du temps depuis l'accélération a commencé, le code devrait ressembler à quelque chose comme:
position += velocity_function(timeSinceStart)
où "velocity_function" est l'une des deux formules pour v(t) et vous n'avez plus besoin d'une vitesse variable. En général, il y a un compromis à faire ici: le calcul de v(t) peut être plus gourmand en ressources que de simplement la mise à jour de vitesse à l'aide d'un schéma itératif (en raison de la croissance exponentielle des termes), mais il est garanti de rester stable et limité. Sous certaines conditions (par exemple en essayant d'obtenir un très court tmax), l'itération peut devenir instable et blow-up, un problème courant avec les avant d'Euler la méthode. Toutefois, le maintien de limites sur les variables (tels que 0 < f < 1), doit empêcher ces instabilités.
En outre, si vous vous sentez quelque peu masochiste, vous pouvez être en mesure d'intégrer la formule de v(t) pour obtenir une solution de la forme finie pour p(t), ce qui précède, la nécessité d'une itération de Newton tout à fait. Je vais vous laisser pour les autres de s'y essayer. =)