Come calcolare la decelerazione necessaria per raggiungere una certa velocità su una certa distanza?

StackOverflow https://stackoverflow.com/questions/1088088

  •  23-08-2019
  •  | 
  •  

Domanda

Ho provato le equazioni di fisica tipiche per questo, ma nessuno di loro realmente lavoro perché le equazioni che fare con accelerazione costante e la mia sarà necessario cambiare per funzionare correttamente. Fondamentalmente ho una macchina che può essere in corso in una vasta gamma di velocità e ha bisogno di rallentare e fermarsi su una data distanza e il tempo come si raggiunge la fine del suo percorso.

Così, ho:
    V0, o la corrente velocità
    Vf, o la velocità voglio raggiungere (in genere 0)
    t, o la quantità di tempo che voglio prendere per raggiungere la fine del mio percorso
    d, o la distanza che voglio andare come cambio da V0 a Vf

voglio calcolare
    a, o l'accelerazione necessaria per andare da V0 a Vf

La ragione per cui questo diventa una domanda specifica per la programmazione è perché a deve essere ricalcolato ogni singolo passo temporale come la macchina continua a fermarsi. Così, V0 costantemente viene modificata per essere V0 da ultimo passo temporale plus la a che è stato calcolato lo scorso passo temporale. Quindi, in sostanza inizierà l'arresto lentamente, poi alla fine fermarsi più bruscamente, un po 'come una macchina nella vita reale.

modifiche:
Va bene, grazie per le grandi risposte. Un sacco di quello che mi serviva era solo un po 'di aiuto a pensare a questo. Sarò più preciso, ora che ho alcune idee da tutti voi:

Ho un c macchina che è 64 pixels dalla sua destinazione, così d=64. Si sta guidando in 2 pixels per timestep, dove un timestep is 1/60 of a second. Voglio trovare il a accelerazione che porterà ad una velocità di 0.2 pixels per timestep per il momento ha viaggiato d.
d = 64 //distance
V0 = 2 //initial velocity (in ppt)
Vf = 0.2 //final velocity (in ppt)

Anche perché questo avviene in un ciclo di gioco, un delta variabile viene fatto passare attraverso ogni azione, che è il multiple of 1/60s that the last timestep took. In altre parole, se ci sono voluti 1 / 60s, allora delta è 1,0, se ci sono voluti 1 / 30s, quindi delta è 0.5. Prima dell'accelerazione effettiva applicazione, viene moltiplicato per questo valore delta. Allo stesso modo, prima che la macchina si sposta nuovamente la sua velocità viene moltiplicato per il valore delta. Questa è roba abbastanza standard, ma potrebbe essere ciò che sta causando problemi con i miei calcoli.

È stato utile?

Soluzione

Linear accelerazione a di d distanza che va da un Vi velocità iniziale di un Vf velocità finale:

a = (Vf*Vf - Vi*Vi)/(2 * d)

Modifica :

Dopo la modifica, mi permetta di provare e valutare ciò che è necessario ...

Se si prende questa formula e inserisce i numeri, si ottiene un'accelerazione costante di -0,0309375. Ora, teniamo chiamando questo risultato 'a'.

Quello che vi serve tra timestamp (fotogrammi?), Non è in realtà l'accelerazione, ma la nuova posizione del veicolo, giusto? Quindi si utilizza la seguente formula:

Sd = Vi * t + 0.5 * t * t * a

dove Sd è il corrente distanza dalla posizione iniziale a correnti telaio / momento / sum_of_deltas, V'è la velocità iniziale, e t è il tempo dall'inizio.

Con questo, il vostro decelerazione per costante, ma anche se è lineare, la velocità li accoglierà per i vostri vincoli.

Se si desidera una decelerazione per non lineare, si potrebbe trovare qualche metodo di interpolazione non lineare, e interpolare senza accelerazione, ma semplicemente la posizione tra due punti.

location = non_linear_function(time);

Altri suggerimenti

I quattro vincoli che date sono uno troppi per un sistema lineare (uno con accelerazione costante), dove ogni tre delle variabili sarebbe sufficiente per calcolare l'accelerazione e quindi determinare il quarto variabili. Tuttavia, il sistema è il modo in specificate con un sistema non lineare del tutto generale - ci possono essere numerabile infiniti modi per cambiare l'accelerazione nel corso del tempo, oltre a soddisfare tutti i vincoli come dato. Puoi forse meglio specificare insieme che tipo di accelerazione curva dovrebbe cambiare nel corso del tempo?

Uso 0 indice per significare "all'inizio", 1 a significare "alla fine", e D per Delta a significare "variante", data un'accelerazione lineare cambia

  a(t) = a0 + t * (a1-a0)/Dt

dove a0 e a1 sono i due parametri che vogliamo calcolare per soddisfare tutti i vari vincoli, mi Compute (se non c'è stato alcun passo falso, come ho fatto tutto a mano):

DV = Dt * (a0+a1)/2
Ds = Dt * (V0 + ((a1-a0)/6 + a0/2) * Dt)

Dato DV, Dt e Ds sono tutti dato, questo lascia 2 equazioni lineari nelle incognite a0 e a1 in modo da poter risolvere per questi (ma sto lasciando le cose in questa forma per rendere più facile per ricontrollare le mie derivazioni !!!).

Se si sta applicando le formule appropriate ad ogni passo per calcolare i cambiamenti nello spazio e la velocità, si dovrebbe fare alcuna differenza se si calcola a0 e A1 una volta per tutte o ricalcolare ad ogni passo su appoggi di Dt, Ds e DV.

Se stai cercando di simulare un'accelerazione dipendente dal tempo le equazioni, significa solo che si deve presumere che. Bisogna integrare F = ma insieme con le equazioni di accelerazione, questo è tutto. Se l'accelerazione non è costante, basta risolvere un sistema di equazioni invece di uno solo.

Ora è davvero tre equazioni vettoriali che si devono integrare contemporaneamente: uno per ogni componente di spostamento, velocità e accelerazione, o nove equazioni in totale. La forza in funzione del tempo sarà un ingresso per il vostro problema.

Se stai assumendo movimento 1D sei giù a tre equazioni simultanee. Quelli per velocità e spostamento sono entrambi abbastanza facili.

In realtà, la capacità fermando una macchina dipende dalla pressione sul pedale del freno, qualsiasi freno motore che sta succedendo, condizioni di superficie, e tale: anche, c'è quella "afferrare" alla fine, quando la macchina si ferma davvero. Modellazione che è complicato, e siete improbabile trovare buone risposte su un sito web di programmazione. Trova alcuni ingegneri automobilistici.

A parte questo, non so quello che stai chiedendo. Stai cercando di determinare un programma di frenata? Come in c'è una certa quantità di decelerazione mentre costeggiando, e quindi applicando il freno? In guida reale, il tempo non è generalmente considerato in queste manovre, ma piuttosto la distanza.

Per quanto posso dire, il problema è che non si sta chiedendo qualcosa di specifico, il che suggerisce che davvero non hanno capito cosa si vuole realmente. Se desideri fornire un utilizzo di esempio per questo, potremmo probabilmente aiuterà. Così com'è, aver fornito le ossa nude di un problema che è o sovradeterminato o un modo sottovincolata, e non c'è davvero niente che possiamo fare con questo.

se avete bisogno di andare da 10m / s per 0m / s in 1m con accelerazione lineare avete bisogno di 2 equazioni. prima trovare il tempo (t) che serve per fermare.

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

Problema è o sovravincolata o sottovincolata (una non è costante? C'è un massimo di?) O ambigue.

Simplest formula sarà a = (Vf-V0) / t

Edit: se il tempo non è vincolato, e la distanza s è vincolata, e l'accelerazione è costante, allora le formule pertinenti sono s = (Vf + V0) / 2 * t, t = (Vf-V0) / una che semplifica ad un = (Vf 2 - V0 2 ). / (2s)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top