Вычислить положение ускоряющегося тела через определенное время [закрыто]

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Как мне вычислить положение ускоряющегося тела (например,автомобиль) через определенное время (например,1 секунда)?

Для движущегося тела, которое не ускоряется, это линейная зависимость, поэтому я предполагаю, что для ускоряющегося тела она где-то имеет квадратную форму.

Есть какие-нибудь идеи?

Это было полезно?

Решение

Уравнение имеет вид:s = ut + (1/2)a t ^2

где s - положение, u - скорость при t = 0, t - время и a - постоянное ускорение.

Например, если автомобиль трогается с места и разгоняется в течение двух секунд с ускорением 3 м /с ^ 2, он проедет (1/2) * 3 * 2^2 = 6 м

Это уравнение получается в результате аналитического интегрирования уравнений, утверждающих, что скорость - это скорость изменения положения, а ускорение - это скорость изменения скорости.

Обычно в ситуации с программированием игр используется несколько иная формулировка:в каждом кадре переменные скорости и положения интегрируются не аналитически, а численно:

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

где dt - длина кадра (измеряется с помощью таймера:1/60-я секунда или около того).Преимущество этого метода в том, что ускорение может изменяться во времени.

Редактировать Пара человек отметили, что метод численного интегрирования Эйлера (как показано здесь), хотя и самый простой для демонстрации, обладает довольно низкой точностью.Видишь Скорость Верлета (часто используется в играх), и Рунге Кутта 4 - го порядка ("стандартный" метод для научных приложений) для улучшения алгоритмов.

Другие советы

Ну, это зависит от того, является ли ускорение постоянным.Если это так, то это просто

s = ut+1/2 at^2

Если a не является постоянной величиной, вам нужно произвести численное интегрирование.Сейчас существует множество методов, и ни один из них не сравнится по точности с выполнением этого вручную, поскольку все они в конечном счете являются приблизительными решениями.

Самым простым и наименее точным является Метод Эйлера .Здесь вы делите время на дискретные фрагменты, называемые временными шагами, и выполняете

v[n] = v[n-1] * t * a[t]

n является индексом, t является размером временного шага.Позиция обновляется аналогичным образом.Это действительно хорошо только в тех случаях, когда точность не так уж важна.Специальная версия метода Эйлера даст точное решение для движения снаряда (см. wiki), поэтому, хотя этот метод является грубым, он может быть идеальным для некоторых случаев.

Наиболее распространенным методом численного интегрирования, используемым в играх и некоторых химических симуляциях, является Скорость Верлета, который является особой формой более общего метода Верле.Я бы порекомендовал этот вариант, если метод Эйлера слишком груб.

Вы можете погуглить это.Я нашел это: http://www.ugrad.math.ubc.ca/coursedoc/math101/notes/applications/velocity.html

Но если вы не хотите читать, это:

p(t) = x(0) + v(0)*t + (1/2)at^2

где

  • p (t) = положение в момент времени t
  • x(0) = положение в нулевой момент времени.
  • v (0) = скорость в нулевой момент времени (если у вас нет скорости, вы можете игнорировать этот термин)
  • a = ускорение
  • t = ваш текущий itme

Предполагая, что вы имеете дело с постоянным ускорением, формула выглядит следующим образом:

расстояние = (начальная скорость * время) + (ускорение * время * time) / 2

где

расстояние является ли пройденное расстояние

начальная скорость является начальной скоростью (равна нулю, если тело изначально находится в состоянии покоя, так что в этом случае вы можете опустить этот член).

время настало ли время

ускорение является (постоянным) ускорением

Убедитесь в том, что при расчетах используются правильные единицы измерения, т.е.метры, секунды и так далее.

Очень хорошая книга на эту тему есть Физика для разработчиков игр.

Предполагая постоянное ускорение и начальную скорость v0,

x(t) = (1/2 * a * t^2) + (v0 * t)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top