9
votes

Comment calculer la décélération nécessaire pour atteindre une certaine vitesse sur une certaine distance?

J'ai essayé les équations de physique typiques pour cela, mais aucun d'entre eux ne fonctionne vraiment car les équations traitent d'une accélération constante et de la mine devront changer correctement. Fondamentalement, j'ai une voiture qui peut aller à une large gamme de vitesses et doit ralentir et arrêter sur une distance et une heure données, car elle atteint la fin de son chemin.

Alors, j'ai:
v0 ou la vitesse actuelle
VF ou la vitesse que je veux atteindre (typiquement 0)
t ou la quantité de temps que je veux prendre pour atteindre la fin de mon chemin
d ou la distance que je veux aller comme je passe à partir de V0 à VF

Je veux calculer
A ou l'accélération nécessaire pour aller de V0 à VF

La raison pour laquelle cela devient une question spécifique à la programmation est parce que A doit être recalculé tous les horaires à mesure que la voiture continue d'arrêter. Donc, v0 est constamment modifié pour être v0 à partir du dernier TIMESTEP plus le A calculé dernier TimeStep. Donc, essentiellement, cela commencera à s'arrêter lentement puis finira éventuellement s'arrêter plus brusquement, comme une voiture dans la vie réelle.

Edits:
D'accord, merci pour les grandes réponses. Beaucoup de ce dont j'avais besoin était juste d'aider à penser à cela. Laissez-moi être plus précis maintenant que j'ai encore plus d'idées de votre part:

J'ai une voiture C c'est 64 pixels de sa destination, donc d = 64 . Il conduit à 2 pixels par TIMESTPE , où un TIMESTP est 1/60 d'une seconde . Je veux trouver l'accélération A qui l'apportera à une vitesse de 0,2 pixels par TIMESTEP au moment où il a parcouru d .
D = 64 // Distance
V0 = 2 // Vitesse initiale (en PPT)
VF = 0,2 // Vélocité finale (en PPT)

Également parce que cela se produit dans une boucle de jeu, une variable delta est transmise à chaque action, qui est le multiple de 1/60 de 1/60 que le dernier TIMESTEP a pris . En d'autres termes, s'il a fallu 1/60, alors delta est 1,0, s'il a fallu 1/30, alors delta est de 0,5. Avant que l'accélération est appliquée, elle est multipliée par cette valeur Delta. De même, avant que la voiture ne se déplace à nouveau, sa vitesse est multipliée par la valeur Delta. C'est de jolies choses standard, mais ce pourrait être ce qui cause des problèmes avec mes calculs.


4 commentaires

Désolé, je pense que votre compréhension de la physique est confuse. F = MA vous dit qu'une accélération changeante a à voir avec une force en mutation. Une voiture ne s'arrête pas «plus brusquement» dans la vie réelle, à moins d'augmenter la force de freinage en marchant sur la pédale plus difficile.


@duffymo: Techniquement, vous sentez que la secousse à la fin de la décélération lorsque les choses vont de lentement à arrêter, car un friction dynamique cède la place à un frottement statique; Le frottement statique est plus grand que le frottement dynamique.


... Mais si vous voulez obtenir cela détaillé, vous devrez modéliser la transmission et le ressort entre route et pneus et entre pneus et châssis.


@Jason S: Il y a aussi l'effet de la suspension ressort de la suspension lorsque la véritable décélération tombe à zéro. Combiné au bit de friction statique, cela rend l'expérience du passager assez compliqué.


6 Réponses :


6
votes

Les quatre contraintes que vous donnez sont une trop nombreuses pour un système linéaire (une avec une accélération constante), où trois des variables suffiraient à calculer l'accélération et à déterminer ainsi la quatrième variables. Cependant, le système est de façon sous non spécifié pour un système non linéaire totalement général - il peut y avoir des moyens incompatiquablement infinis de modifier l'accélération au fil du temps tout en satisfaisant toutes les contraintes telles que données. Pouvez-vous peut-être spécifier mieux ce type d'accélération de courbe devrait changer au fil du temps?

Utiliser 0 index pour signifier "au début", 1 signifie "à la fin", et D pour le delta signifie "variation", donnée une accélération modifiée linéairement xxx

où A0 et A1 sont les deux paramètres que nous voulons calculer pour satisfaire toutes les différentes contraintes, je calcule (s'il n'y a pas eu de mal au pas, comme je l'ai fait tout à la main): xxx

donné DV, DT et DS sont tous donnés, cela laisse 2 équations linéaires dans les inconnues A0 et A1 afin que vous puissiez résoudre ces éléments (mais Je quitte des choses dans ce formulaire pour faciliter la double vérification sur mes dérivations !!!).

Si vous appliquez les formules appropriées à chaque étape pour calculer des changements dans l'espace et la vitesse, il Ne doit faire aucune différence si vous calculez A0 et A1 une fois et pour tous ou les recomuez à chaque étape basée sur le DT, DS et DV restants.


2 commentaires

Vous avez raison - je devrais probablement utiliser un système linéaire. Tant que cela a l'air naturel, je me soucie beaucoup de la raison pour laquelle ou de la façon dont il restera plus simple. Lorsque vous le proposez comme une courbe et que j'y pense vraiment, il est peu probable qu'une courbe est peu probable dans tous les cas. Je ne peux pas penser à un graphique exponentiel qui correspondrait à ce que je cherche, mais je peux penser à plusieurs linéaires. Si j'utilise une décélération linéaire, dois-je ne pas calculer la seule une fois (quand t == 0) ou cela fonctionnera-t-il toujours si je recalcule chaque étape?


Modification de ma réponse pour répondre à ces questions supplémentaires de manière bien formatée



0
votes

Le problème est surconstruit ou sous-construit (A n'est pas constant? Y a-t-il un maximum A?) ou ambigu.

La formule la plus simple serait = (vf-v0) / t

EDIT: Si le temps n'est pas contraint, et la distance s est contrainte et l'accélération est constante, les formules correspondantes sont S = (VF + V0) / 2 * T, T = (VF-V0) / A qui simplifie à a = (vf 2 - v0 2 ) / (2s).


3 commentaires

ooooookay. Veuillez nous dire les contraintes qui aideraient à déterminer l'accélération, sinon constante.


F (t) = ma (t), où la force et les accélérations sont toutes deux des fonctions vectorielles du temps, bien sûr.


OP a donné des contraintes sur v0, vf, d, t. Si A est constant et V0, VF, et t sont des variables indépendantes, alors A = (VF-V0) / T. Je m'en fiche du coup de 2 points, mais je me soucie d'être évité pour avoir un effort honnête pour une réponse. Sinon, pourquoi passer le temps à essayer de donner des réponses sur ce site?



5
votes

Si vous essayez de simuler une accélération dépendante du temps dans vos équations, cela signifie simplement que vous devriez supposer cela. Vous devez intégrer F = MA avec les équations d'accélération, c'est tout. Si l'accélération n'est pas constante, il suffit de résoudre un système d'équations au lieu d'un seul.

Alors maintenant, il s'agit vraiment de trois équations vectorielles que vous devez intégrer simultanément: une pour chaque composant de déplacement, de vitesse et d'accélération, ou neuf équations au total. La force en fonction du temps sera une entrée pour votre problème.

Si vous supposez un mouvement de 1D, vous êtes à trois équations simultanées. Ceux pour la vitesse et le déplacement sont tous deux assez faciles.


2 commentaires

Hey Duffymo, merci pour la réponse. J'avais effectivement référence à la façon dont les gens conduisent généralement - commencent avec votre pied sur le frein légèrement lorsque vous êtes loin de l'arrêt, puis appuyez dessus lorsque vous êtes sur le point de l'atteindre, causant une petite "lurch" typiquement comme l'élan de La voiture porte son poids en avant. La force et la masse sont sans importance (je pense) à mon problème; Je me soucie seulement de l'accélération comme le changement de vitesse au fil du temps, M / S / S. Vous pouvez supposer que chaque voiture a une masse de 1, de sorte que la force est essentiellement simplement la vitesse.


"La force et la masse sont sans importance (je pense) à mon problème; Je me soucie seulement de l'accélération comme le changement de vitesse au fil du temps, m / s. Vous pouvez supposer que chaque voiture a une masse de 1, de sorte que la force soit essentiellement juste la vitesse. " - Je ne suis pas d'accord. Vous vous dispirez peut-être que vous souhaitiez adopter une approche empirique qui n'est pas 100% fidèle à la physique, mais reconnaissons-la pour ce que c'est. L'accélération n'est qu'une chose - le taux de changement de vitesse par rapport au temps, un tenseur de premier ordre. Il n'y a pas d'autre définition.



9
votes

Accélération linéaire A code> pour une distance d code> d'une vitesse de départ VI code> à une vitesse finale vf code>:

location = non_linear_function(time);


2 commentaires

Vraiment, quelle horrible typo. Merci.


Formule, ainsi que peu de fautes de frappe fixes, une idée supplémentaire ajoutée.



1
votes

Dans la vie réelle, une capacité d'arrêt de la voiture dépend de la pression sur la pédale de frein, tout freinage de moteur qui se passe, des conditions de surface et de tels: aussi, il y a aussi «attraper» à la fin lorsque la voiture s'arrête vraiment. Modélisation compliquée et vous êtes peu probable de trouver de bonnes réponses sur un site Web de programmation. Trouvez des ingénieurs automobiles.

En plus de cela, je ne sais pas ce que vous demandez. Essayez-vous de déterminer un horaire de freinage? Comme dans le cas d'une certaine décélération tout en roulant, puis appliquant le frein? En conduite réelle, le temps n'est généralement pas pris en compte dans ces manœuvres, mais plutôt la distance.

Autant que je puisse dire, votre problème est que vous ne demandez rien de spécifique, ce qui suggère que vous n'avez vraiment pas compris ce que vous voulez réellement. Si vous fournissez un échantillon d'utilisation pour cela, nous pourrions probablement vous aider. Comme c'est le cas, vous avez fourni les os nus d'un problème surdéterminé ou sous-construit, et il n'y a vraiment rien que nous puissions faire avec cela.


1 commentaires

Il y a beaucoup de niveaux de fidélité que vous pouvez intégrer dans un modèle. Si une accélération constante de 1D est une extrême dans le spectre, le vôtre semble un peu trop loin dans l'autre sens (bien que cela ne soit même pas proche du plus complexe). Je pense que l'approche empirique de la physique et empirique est ce qu'il / elle cherche ici.



1
votes

Si vous devez passer de 10m / s à 0m / s en 1M avec une accélération linéaire, vous avez besoin de 2 équations. Trouvez d'abord le temps (t) qu'il faut pour arrêter.

v0 = initial velocity
vf = final velocity
x0 = initial displacement
xf = final displacement
a = constant linear acceleration

(xf-x0)=.5*(v0-vf)*t
t=2*(xf-x0)/(v0-vf)
t=2*(1m-0m)/(10m/s-0m/s)
t=.2seconds

next to calculate the linear acceleration between x0 & xf

(xf-x0)=(v0-vf)*t+.5*a*t^2
(1m-0m)=(10m/s-0m/s)*(.2s)+.5*a*((.2s)^2)
1m=(10m/s)*(.2s)+.5*a*(.04s^2)
1m=2m+a*(.02s^2)
-1m=a*(.02s^2)
a=-1m/(.02s^2)
a=-50m/s^2

in terms of gravity (g's)

a=(-50m/s^2)/(9.8m/s^2)
a=5.1g over the .2 seconds from 0m to 10m


0 commentaires