Oblicz pozycję przyspieszającego ciała po pewnym czasie [zamknięty]

Jak obliczyć pozycję przyspieszającego ciała (np. samochodu) po pewnym czasie (np. 1 sekundzie)?

Dla ciała poruszającego się, które nie przyspiesza, jest to zależność liniowa, więc zakładam, że dla ciała przyspieszającego wiąże się to gdzieś z kwadratem.

Jakieś pomysły?

Author: Robert Gamble, 2008-09-30

5 answers

Równanie jest następujące: s = ut + (1/2)A T^2

Gdzie s jest pozycją, u jest prędkością przy t=0, t jest czasem, a A jest stałym przyspieszeniem.

Na przykład, jeśli samochód startuje nieruchomo i przyspiesza przez dwie sekundy z przyspieszeniem 3m / s^2, porusza się(1/2) * 3 * 2^2 = 6m

To równanie pochodzi z całkowania analitycznie równań stwierdzających, że prędkość jest szybkością zmiany położenia, a przyspieszenie jest szybkością zmiany prędkości.

Zazwyczaj w sytuacja programowania gry, można by użyć nieco innego sformułowania: w każdej klatce zmienne prędkości i położenia są zintegrowane nie analitycznie, ale liczbowo: {]}

s = s + u * dt;
u = u + a * dt;

Gdzie dt jest długością klatki (mierzoną za pomocą timera: 1/60 sekundy lub więcej). Ta metoda ma tę zaletę, że przyspieszenie może się różnić w czasie.

Edit kilka osób zauważyło, że metoda Eulera całkowania numerycznego (jak pokazano tutaj), choć najprostsza do zademonstrować z, ma dość słabą dokładność. Zobacz Velocity Verlet (często używany w grach) i 4th order Runge Kutta ('standardowa' metoda zastosowań naukowych) dla ulepszonych algorytmów.

 33
Author: Chris Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 15:46:56

To zależy od tego, czy przyspieszenie jest stałe. Jeśli jest to po prostu

s = ut+1/2 at^2

Jeśli a nie jest stała, trzeba numerycznie całkować. Teraz istnieje wiele metod i żadna z nich nie pobije robiąc to ręcznie dla dokładności, ponieważ wszystkie są ostatecznie przybliżonymi rozwiązaniami.

Najprostszą i najmniej dokładną metodą jest metoda Eulera . Tutaj dzielisz czas na dyskretne kawałki zwane krokami czasowymi i wykonujesz
v[n] = v[n-1] * t * a[t]

n is index, t is wielkość kroku czasowego. Pozycja jest podobnie aktualizowana. Jest to naprawdę dobre tylko w przypadkach, w których dokładność nie jest aż tak ważna. Specjalna wersja metody Eulera da dokładne rozwiązanie dla ruchu pocisku (zobacz wiki), więc chociaż metoda ta jest prymitywna, może być idealna dla niektórych suituations.

Najczęstszą metodą całkowania numerycznego stosowaną w grach i w niektórych symulacjach chemicznych jest Velocity Verlet, która jest specjalną formą bardziej ogólnego Verleta metoda. Polecam ten, jeśli Euler jest zbyt prymitywny.

 6
Author: freespace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 15:27:39

Możesz to wygooglować. Znalazłem to: http://www.ugrad.math.ubc.ca/coursedoc/math101/notes/applications/velocity.html

Ale jeśli nie chcesz czytać, to:

P (t) = x (0) + v(0) * t + (1/2) a t^2

Gdzie

  • p (t) = pozycja w czasie t
  • x (0) = pozycja w czasie zerowym
  • v(0) = prędkość w czasie zerowym (jeśli nie masz prędkości, możesz zignorować ten termin)
  • a = the przyspieszenie
  • t = Twój obecny itme
 1
Author: asterite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 15:21:16

Zakładając, że masz do czynienia ze stałym przyspieszeniem, wzór wynosi:

Distance = (initial_velocity * time) + (acceleration * time * time) / 2

Gdzie

Odległość to przebyta odległość

Initial_velocity jest prędkością początkową (zero, jeśli ciało jest początkowo w spoczynku, więc można zrezygnować z tego terminu w takim przypadku)

Czas jest czasem

Przyspieszenie jest (stałym) przyspieszeniem

Upewnij się, że przy obliczaniu używaj odpowiednich jednostek, tj. metrów, sekund i tak dalej.

Bardzo dobrą książką na ten temat jest Fizyka dla twórców gier.

 1
Author: Mihai Limbășan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 15:22:36

Zakładając stałe przyspieszenie i prędkość początkową v0,

x(t) = (1/2 * a * t^2) + (v0 * t)
 1
Author: jholl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 15:29:13