Вопрос по – Как рассчитать замедление, необходимое для достижения определенной скорости на определенном расстоянии?

8

Я попробовал типичные физические уравнения для этого, но ни одно из них на самом деле не работает, потому что уравнения имеют дело с постоянным ускорением, и мои должны будут измениться, чтобы работать правильно. По сути, у меня есть машина, которая может двигаться с большим диапазоном скоростей и должна замедляться и останавливаться на определенном расстоянии и времени, когда она достигает конца своего пути.

Так что я:
V0или текущая скорость
Vfили скорость, которую я хочу достичь (обычно 0)
tили количество времени, которое я хочу потратить, чтобы достичь конца моего пути
dили расстояние, которое я хочу пройти при изменении от V0 до Vf

Я хочу посчитать
aили ускорение, необходимое для перехода от V0 к Vf

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

редактирует:
Хорошо, спасибо за отличные ответы. Многое из того, что мне было нужно, было просто помочь подумать об этом. Позвольте мне быть более конкретным сейчас, когда у меня есть еще несколько идей от всех вас:

у меня есть машинаc то есть64 pixels от места назначения, такd=64, Это вождение в2 pixels per timestep, гдеtimestep is 1/60 of a second, Я хочу найти ускорениеa это приведет к скорости0.2 pixels per timestep к тому времени, как он путешествовалd.
d = 64 //distance
V0 = 2 //initial velocity (in ppt)
Vf = 0.2 //final velocity (in ppt)

Кроме того, потому что это происходит в игровом цикле, переменнаяdelta передается каждому действию, которое являетсяmultiple of 1/60s that the last timestep took, Другими словами, если это заняло 1/60, тоdelta 1,0, если это заняло 1/30 с, тоdelta 0,5. До фактического применения ускорения оно умножается на это значение дельты. Точно так же, прежде чем автомобиль снова начнет движение, его скорость умножается на значение дельты. Это довольно стандартная вещь, но это может быть причиной моих расчетов.

@Jason S: Существует также эффект отскока подвески, когда реальное замедление падает до нуля. В сочетании с битом статического трения это значительно усложняет восприятие пассажира. dmckee
Извините, я думаю, что ваше понимание физики сбито с толку. F = ma говорит вам, что изменение ускорения связано с изменением силы. Автомобиль не останавливается более "резко" в реальной жизни, если вы не увеличиваете тормозное усилие, нажимая на педаль сильнее. duffymo
... Но если вы хотите получить более подробную информацию, вам нужно смоделировать трансмиссию и упругость между дорожными шинами и между шинами и шинами. шасси. Jason S
@duffymo: технически вы чувствуете этот рывок в конце замедления, когда дела идут от медленного к остановке, поскольку динамическое трение сменяется статическим трением; статическое трение больше, чем динамическое трение. Jason S

Ваш Ответ

6   ответов
1

нием, вам нужно 2 уравнения. сначала найдите время (t), необходимое для остановки.

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
1

ления на педаль тормоза, от любого торможения двигателем, которое происходит, от состояния поверхности и т. Д., Также, это "захватывает"; в конце, когда машина действительно останавливается. Сложное моделирование, и вы вряд ли найдете хорошие ответы на веб-сайте программирования. Найдите несколько автомобильных инженеров.

Кроме того, я не знаю, о чем вы просите. Вы пытаетесь определить график торможения? Как при определенном снижении скорости при движении накатом, а затем при нажатии на педаль тормоза? В реальной езде время обычно учитывается не в этих маневрах, а в расстоянии.

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

Есть много уровней верности, которые вы можете встроить в модель. Если постоянное ускорение 1D является одной из крайностей в спектре, ваше кажется слишком далеко в другом направлении (хотя даже близко не к самому сложному). Я думаю, что нефизический, эмпирический подход - это то, что он / она ищет здесь.
0

либо недостаточно ограничена (а не является постоянной величиной, существует ли максимум а?) Или неоднозначна.

Простейшей формулой будет a = (Vf-V0) / t

Редактировать: если время не ограничено, расстояние s ограничено, а ускорение постоянное, то соответствующие формулы s = (Vf + V0) / 2 * t, t = (Vf-V0) / a, что упрощается до a = (Vf2 - V02) / (2с).

ooooookay. Пожалуйста, сообщите нам ограничения, которые помогут определить ускорение, если не постоянное.
F (t) = ma (t), где сила и ускорения, разумеется, являются векторными функциями времени.
ОП дал ограничения на V0, Vf, d, t. Если a является постоянным и V0, Vf и t являются независимыми переменными, то a = (Vf-V0) / t. Меня не волнует попадание в 2 очка, но я забочусь о том, чтобы меня опровергли без комментариев за честные попытки найти ответ. Иначе зачем тратить время на попытки дать ответы на этом сайте?
6

которые вы даете, - это слишком много для линейной системы (одно с постоянным ускорением), где любых трех переменных будет достаточно для вычисления ускорения и тем самым определения четвертых переменных. Тем не менее, система способunder-определенный для совершенно общей нелинейной системы - могут существовать бесчисленные бесконечные способы изменения ускорения во времени при соблюдении всех указанных ограничений. Может быть, вы могли бы лучше указать, какой тип ускорения кривой должен меняться со временем?

Использование 0 индекса для обозначения «в начале», 1 для обозначения «в конце» и D для Delta в значении «вариация», с учетом линейно изменяющегося ускорения

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

где a0 и a1 - два параметра, которые мы хотим вычислить для удовлетворения всех различных ограничений, я вычисляю (если не было ошибок, как я делал все вручную):

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

Учитывая, что все DV, Dt и Ds заданы, это оставляет 2 линейных уравнения в неизвестных a0 и a1, так что вы можете решить их (но я оставляю вещи в этой форме, чтобы упростить двойную проверку на моих выводах !!! ).

Если вы применяете надлежащие формулы на каждом шаге для вычисления изменений в пространстве и скорости, не должно иметь значения, вычисляете ли вы a0 и a1 раз и навсегда или пересчитаете их на каждом шаге на основе оставшихся Dt, Ds и DV.

редактирование моего ответа, чтобы ответить на эти дополнительные вопросы в хорошо отформатированном виде
Вы правы - я, вероятно, должен использовать линейную систему. Пока это выглядит естественно, я не очень беспокоюсь о том, почему или как, поэтому проще будет сделать это проще. Когда вы предлагаете это как кривую, а я действительно думаю об этом, то кривая в любом случае маловероятна. Я не могу думать об экспоненциальном графе, который бы соответствовал тому, что я ищу, но я могу думать о нескольких линейных. Если я использую линейное замедление, нужно ли рассчитывать его только один раз (при t == 0) или оно все равно будет работать, если я пересчитываю каждый шаг по времени? Eli
5

уравнениях, это просто означает, что вы должны это принять. Вы должны интегрировать F = ma вместе с уравнениями ускорения, вот и все. Если ускорение не является постоянным, вам просто нужно решить систему уравнений вместо одного.

Так что теперь это действительно три векторных уравнения, которые вы должны интегрировать одновременно: по одному для каждого компонента перемещения, скорости и ускорения, или всего девять уравнений. Сила как функция времени будет входом для вашей проблемы.

Если вы принимаете одномерное движение, вы переходите к трем уравнениям одновременно. Те, что для скорости и перемещения, довольно просты.

Привет, Даффимо, спасибо за ответ. Я действительно имел в виду то, как люди обычно водят машину - начинайте с того, что ваша нога слегка стоит на тормозе, когда вы находитесь далеко от упора, затем сильно нажимайте на нее, когда вы приближаетесь к ней, вызывая небольшой «крен» как правило, как импульс автомобиля несет свой вес вперед. Сила и масса не важны (я думаю) для моей проблемы; Меня волнует только ускорение как изменение скорости со временем, м / с / с. Можно предположить, что каждая машина имеет массу 1, так что сила - это, по сути, только скорость. Eli
«Сила и масса не важны (я думаю) для моей проблемы; Меня волнует только ускорение как изменение скорости со временем, м / с / с. Можно предположить, что каждая машина имеет массу 1, так что сила - это, по сути, только скорость. & Quot; - Я не согласен. Вы можете утверждать, что хотите использовать эмпирический подход, который не на 100% верен физике, но давайте признаем, что это так. Ускорение - это ТОЛЬКО одно - скорость изменения скорости по времени, тензор первого порядка. Нет другого определения.
9

Линейное ускорениеa на расстоянииd идет с стартовой скоростиVi до конечной скоростиVf:

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

EDIT:

После вашего редактирования, позвольте мне попробовать и оценить, что вам нужно ...

Если вы возьмете эту формулу и введете свои числа, вы получите постоянное ускорение -0,0309375. Теперь, давайте продолжим называть этот результат "a".

Что вам нужно между временными метками (кадрами?), Это не ускорение, а новое местоположение автомобиля, верно? Таким образом, вы используете следующую формулу:

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

где Sd являетсяcurrent расстояние от начальной позиции в текущем кадре / моменте / sum_of_deltas, Vi - начальная скорость, а t - время с начала.

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

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

location = non_linear_function(time);
Формула, а также исправлено несколько опечаток, добавлена дополнительная идея.
Вы выключены в 2 раза
Действительно, какая ужасная опечатка. Благодарю.

Похожие вопросы