2009-07-06 17 views
8

Ho provato le tipiche equazioni fisiche per questo, ma nessuno di loro funziona davvero perché le equazioni si occupano di un'accelerazione costante e il mio dovrà cambiare per funzionare correttamente. Fondamentalmente ho una macchina che può andare a una vasta gamma di velocità e ha bisogno di rallentare e fermarsi su una determinata distanza e tempo mentre raggiunge la fine del suo percorso.Come calcolare la decelerazione necessaria per raggiungere una certa velocità su una certa distanza?

Così, ho:
V0, o la velocità corrente
Vf, o la velocità voglio raggiungere (in genere 0)
t, o la quantità di tempo che voglio prendere per raggiungere la fine del il 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

Il motivo per cui questa domanda diventa specifica della programmazione è che lo a deve essere ricalcolato ogni singolo timestep mentre la macchina continua a fermarsi. Quindi, V0 viene modificato costantemente per essere V0 dall'ultimo timestep plus il a che è stato calcolato all'ultimo timestep. Quindi in sostanza inizierà a fermarsi lentamente, poi alla fine si fermerà più bruscamente, un po 'come una macchina nella vita reale.

MODIFICHE:
Va bene, grazie per le grandi risposte. Un sacco di ciò di cui avevo bisogno era solo un po 'di aiuto a pensarci. Vorrei essere più specifico ora che ho qualche idea in più da tutti voi:

Ho una macchina c che è 64 pixels dalla sua destinazione, quindi d=64. Sta guidando allo 2 pixels per timestep, dove uno timestep is 1/60 of a second. Voglio trovare l'accelerazione a che lo porterà alla velocità di 0.2 pixels per timestep quando 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, una variabile delta viene passato attraverso ogni azione, che è il multiple of 1/60s that the last timestep took. In altre parole, se ci sono voluti 1/60s, quindi delta è 1.0, se ci sono voluti 1/30s, quindi delta è 0,5. Prima che l'accelerazione venga effettivamente applicata, viene moltiplicata per questo valore delta. Allo stesso modo, prima che l'auto si muova di nuovo, la sua velocità viene moltiplicata per il valore delta. Questo è roba abbastanza standard, ma potrebbe essere ciò che sta causando problemi con i miei calcoli.

+1

Scusa, penso che la tua comprensione della fisica sia confusa. F = ma ti dice che un'accelerazione mutante ha a che fare con una forza che cambia. Una macchina non si ferma "più bruscamente" nella vita reale a meno che non si aumenti la forza frenante premendo più a fondo il pedale. – duffymo

+0

@duffymo: tecnicamente, ti senti quel cretino alla fine della decelerazione quando le cose vanno dal lento all'arresto, mentre l'attrito dinamico cede il passo all'attrito statico; l'attrito statico è maggiore dell'attrito dinamico. –

+0

... Ma se vuoi ottenere questo dettaglio, dovrai modellare la trasmissione e l'elasticità tra strada e pneumatici e tra pneumatici e telaio. –

risposta

9

lineare a accelerazione per una distanza d passando da una velocità iniziale Vi ad una velocità finale Vf:

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

EDIT:

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

Se si prende questa formula e si inseriscono i numeri, si ottiene un'accelerazione costante di -0,0309375. Ora, continuiamo a chiamare questo risultato 'a'.

Quello che ti serve tra i timestamp (frame?) 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 di partenza al corrente frame/momento/sum_of_deltas, V'è la velocità di partenza, e t è il tempo dall'inizio.

Con questo, il tuo deccelerazione è costante, ma anche se è lineare, la tua velocità soddisferà i tuoi vincoli.

Se si desidera una decelerazione non lineare, è possibile trovare un metodo di interpolazione non lineare e interpolare non l'accelerazione, ma semplicemente posizionare tra due punti.

location = non_linear_function(time); 
+1

sei fuori da un fattore di 2 –

+0

Davvero, che errore di battitura orribile. Grazie. –

+0

Formula, così come alcuni errori di battitura corretti, è stata aggiunta un'ulteriore idea. –

6

I quattro vincoli che si danno sono troppi per un sistema lineare (uno con accelerazione costante), in cui qualsiasi tre delle variabili sarebbe sufficiente per calcolare l'accelerazione e quindi determinare le quarte variabili. Tuttavia, il sistema è il modo sotto -specificato per un sistema non lineare completamente generale - ci possono essere infiniti modi per cambiare l'accelerazione nel tempo soddisfacendo nel contempo tutti i vincoli come dati. Potresti forse specificare meglio il tipo di accelerazione della curva che dovrebbe cambiare nel tempo?

Utilizzo 0 indice per significare "all'inizio", 1 a significare "alla fine", e D per Delta 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, computo (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 dati, questo lascia 2 equazioni lineari nelle incognite a0 e a1 in modo da poter risolvere per questi (ma me ne vado cose che ho n questo modulo per semplificare il doppio controllo sulle mie derivazioni !!!).

Se si applicano le formule corrette ad ogni passaggio per calcolare le modifiche nello spazio e nella velocità, non dovrebbe fare alcuna differenza se si calcola a0 e a1 una volta per tutte o le si ricalcola ad ogni passo in base al Dt rimanente, Ds e DV.

+0

Hai ragione - probabilmente dovrei usare un sistema lineare. Finché sembra naturale, non mi interessa molto del perché o del come, quindi è meglio mantenerlo più semplice. Quando lo proponi come una curva e ci penso davvero, avere una curva è improbabile in ogni caso. Non riesco a pensare a un grafico esponenziale che possa corrispondere a quello che sto cercando, ma posso pensare a molti di quelli lineari. Se utilizzo una decelerazione lineare, devo calcolarlo solo una volta (quando t == 0) o funzionerà ancora se ricalcolo ogni volta che passo? – Eli

+0

modifica la mia risposta per rispondere a queste ulteriori domande in modo ben formattato –

0

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

più semplice 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)/a che semplifica ad a = (Vf - V0)/(2s).

+0

ooooookay. Per favore dicci i limiti che potrebbero aiutare a determinare l'accelerazione, se non costante. –

+0

F (t) = ma (t), dove forza e accelerazioni sono entrambe funzioni vettoriali del tempo, ovviamente. – duffymo

+0

OP ha dato vincoli su V0, Vf, d, t. Se a è costante e V0, Vf e t sono variabili indipendenti, allora a = (Vf-V0)/t.Non mi interessa il colpo da 2 punti, ma mi interessa essere downvoted senza commenti per fare uno sforzo onesto verso una risposta. Altrimenti perché perdere tempo a cercare di dare risposte su questo sito? –

5

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

Quindi ora sono davvero tre equazioni vettoriali che devi integrare contemporaneamente: una per ogni componente di spostamento, velocità e accelerazione o nove equazioni in totale. La forza in funzione del tempo sarà un input per il tuo problema.

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

+0

Hey duffymo, grazie per la risposta. Mi riferivo in effetti al modo in cui la gente guida tipicamente - inizia leggermente con il piede sul freno quando sei lontano dalla fermata, quindi premi forte quando stai per raggiungerlo, causando un piccolo "sobbalzo" tipicamente come lo slancio di l'auto porta il suo peso in avanti. Forza e massa non sono importanti (credo) per il mio problema; Mi interessa solo l'accelerazione come il cambio di velocità nel tempo, m/s/s. Puoi assumere che ogni auto abbia una massa di 1, quindi la forza è essenzialmente solo la velocità. – Eli

+0

"La forza e la massa non sono importanti (credo) per il mio problema, mi interessa solo l'accelerazione come il cambio di velocità nel tempo, m/s/s. Puoi assumere che ogni auto abbia una massa di 1, in modo che la forza sia essenzialmente solo la velocità. " - Non sono d'accordo. Potresti sostenere che vuoi adottare un approccio empirico che non sia fedele al 100% alla fisica, ma riconoscilo per quello che è. L'accelerazione è SOLO una cosa: il tasso di variazione della velocità rispetto al tempo, un tensore del primo ordine. Non c'è altra definizione. – duffymo

1

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 l'auto si ferma davvero. La modellazione è complicata e difficilmente troverai buone risposte su un sito web di programmazione. Trova alcuni ingegneri automobilistici.

A parte questo, non so cosa stai chiedendo. Stai cercando di determinare un programma di frenata? Come in c'è una certa quantità di decelerazione durante il coasting e poi l'applicazione del freno? Nella guida reale, il tempo non viene solitamente considerato in queste manovre, ma piuttosto nella distanza.

Per quanto posso dire, il tuo problema è che non stai chiedendo nulla di specifico, il che suggerisce che non hai davvero capito cosa vuoi veramente. Se fornissi un esempio di utilizzo per questo, potremmo probabilmente aiutarti. Così com'è, hai fornito le ossa nude di un problema che è o sovradeterminato o sottosviluppato, e non c'è davvero nulla che possiamo fare con quello.

+0

Ci sono molti livelli di fedeltà che puoi incorporare in un modello. Se l'accelerazione costante 1D è un estremo nello spettro, il tuo sembra un po 'troppo lontano nella direzione opposta (anche se non è nemmeno vicino al più complesso). Penso che l'approccio empirico non fisico sia ciò che sta cercando qui. – duffymo

1

se è necessario passare da 10 m/sa 0 m/s in 1 m con accelerazione lineare occorrono 2 equazioni. prima trova il tempo (t) necessario per fermarsi.

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 
Problemi correlati