如何计算在一定距离内达到特定速度所需的减速度?

9
我尝试了典型的物理方程,但它们都不适用,因为这些方程涉及恒定加速度,而我的加速度需要改变才能正确工作。基本上,我有一辆车,可以以大范围的速度行驶,并且需要在到达路径末端时,在给定的距离和时间内减速并停止。
所以,我有:
V0,或当前速度
Vf,或我想要达到的速度(通常为0)
t,或我想要花费的时间到达路径的末端
d,或我想要在从V0到Vf转换时走的距离
我想计算
a,或从V0到Vf所需的加速度
之所以这成为一个具体的编程问题,是因为a需要在每个时间步长中重新计算,因为汽车不断地停止。因此,V0不断地被更改为V0从上一个时间步长加上上一个时间步长计算出的a。因此,它将开始缓慢停止,最终会更加突然地停止,就像现实生活中的汽车一样。
编辑:
好吧,谢谢你们的回复。我需要的很多东西只是一些关于这个问题的帮助。现在我有了更多的想法,让我更具体一些:
我有一辆汽车c距离目的地64像素,因此d=64。它以每次步长2像素的速度行驶,其中一个时间步长是1/60秒。我想找到加速度a,使其在行驶d时达到0.2像素每步长的速度。
d = 64 //距离
V0 = 2 //初始速度(以ppt为单位)
Vf = 0.2 //最终速度(以ppt为单位) 还因为这发生在游戏循环中,所以将变量delta传递到每个操作中,它是上一个时间步长花费的1/60秒的倍数。换句话说,如果花费了1/60秒,则delta为1.0,如果花费了1/30秒,则delta为0.5。在实际应用加速度之前,它会乘以此delta值。同样,在汽车再次移动之前,其速度会乘以delta值。这是相当标准的东西,但它可能会导致我的计算出现问题。

1
抱歉,我认为你对物理的理解有些混淆了。F = ma 告诉你,改变加速度与改变力有关。在现实生活中,除非你通过更用力地踩刹车踏板来增加制动力,否则汽车不会“更突然”停止。 - duffymo
@duffymo:从技术上讲,在减速末端当物体由慢速运动到静止时,你会感觉到突然停下来的抖动感,这是因为动摩擦力逐渐变为静摩擦力;静摩擦力大于动摩擦力。 - Jason S
但是,如果你想要更加详细的话,你就需要对传动系统以及路面和轮胎之间、轮胎和底盘之间的弹性进行建模。 - Jason S
@Jason S:还有一点就是当实际减速度降至零时,悬挂弹回的影响。再加上静摩擦力这一部分,使得乘客的体验相当复杂。 - dmckee --- ex-moderator kitten
6个回答

9

线性加速度a是指从起始速度Vi到终止速度Vf所需移动距离为d的过程中的加速度:

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

编辑:

在您的编辑之后,让我尝试评估一下您需要什么...

如果您将这个公式插入您的数字中,您会得到一个恒定的加速度为-0.0309375。现在,我们将继续称这个结果为'a'。

您所需要的不是时间戳(帧?)之间的加速度,而是车辆的新位置,对吗?因此,您可以使用以下公式:

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

Sd是当前帧/时刻/时间差距下的起始位置到当前位置的距离,Vi是起始速度,t是从起点开始的时间。

有了这个公式,你的减速度恒定的,但即使它是线性的,你的速度也会适应你的限制。

如果你想要非线性的减速度,你可以找到一些非线性插值方法,并在两个点之间插值,而不是加速度,而是简单地位置。

location = non_linear_function(time);

真的,这个错别字太可怕了。谢谢。 - Kenan E. K.
公式已经修正了几个拼写错误,并添加了一些额外的想法。 - Kenan E. K.

6
你提供的四个限制条件对于一个线性系统(具有恒定加速度)来说是过多的,其中任意三个变量足以计算加速度并确定第四个变量。然而,对于完全一般的非线性系统来说,该系统的规定可能有无数种方法可以在满足所有给定的约束条件的同时随时间改变加速度。也许你可以更明确地说明加速度如何随时间变化的曲线类型?使用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,这留下了两个未知数a0和a1的线性方程,因此您可以解决这些问题(但我将保留这种形式,以便更轻松地在我的推导中进行双重检查!)。

如果您在每个步骤中应用适当的公式来计算空间和速度的变化,那么无论是一次性计算a0和a1还是根据剩余的Dt、Ds和DV在每个步骤重新计算它们都没有任何区别。


你说得对 - 我可能应该使用线性系统。只要看起来自然,我不太关心为什么或如何,所以保持简单会更好。当你将其提出作为曲线时,我真的想了想,在任何情况下都不太可能需要曲线。我想不出任何指数图能匹配我所寻找的内容,但我可以想到几个线性图。如果我使用线性减速,我是否只需要在t==0时计算一次,还是每个时间步骤重新计算也可以? - Eli
编辑我的答案以规范的方式回答这些进一步的问题。 - Alex Martelli

5

如果你想在方程中模拟时间依赖的加速度,那就意味着你需要假设它。你必须将 F = ma 与加速度方程一起积分,这就是全部内容。如果加速度不是恒定的,那么你需要解决一个方程组而不仅仅是一个。

现在你需要同时积分三个矢量方程:位移、速度和加速度的每个分量都需要一个方程,总共有九个方程。时间函数对应的力将成为问题的输入。

如果你假设只有一维运动,那么你只需要三个同时方程。其中速度和位移的方程都很简单。


嘿duffymo,谢谢你的回复。我的确是在指人们通常驾驶的方式 - 当你离停车点还很远时,脚稍微放在刹车上,等到快要到达停车点时再用力踩下去,使车辆的动量带着它的重量向前推进,从而产生一个小的“颠簸”感。对于我的问题来说,力和质量都不重要(我觉得);我只关心加速度,即速度随时间变化的量,以米/秒²表示。你可以假设每辆车的质量都是1,这样力实际上就等于速度。 - Eli
力和质量对我的问题不重要(我认为);我只关心加速度,即速度随时间的变化,m/s/s。您可以假设每辆汽车的质量为1,因此力实际上只是速度。- 我不同意。您可能会争论您想采用一种经验方法,这种方法并不完全忠实于物理学,但让我们承认它是什么。加速度只是一件事情 - 相对于时间的速度变化率,一个一阶张量。没有其他定义。 - duffymo

1

如果您需要在1米内以线性加速度从10m/s减速到0m/s,则需要两个方程式。首先找到停止所需的时间(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

在现实生活中,汽车的制动能力取决于刹车踏板上的压力、发动机制动、路面条件等因素,此外还有车辆真正停下来时的“抓地力”。对此进行建模是很复杂的,你不太可能在编程网站上找到好的答案。建议寻找一些汽车工程师。

除此之外,我不知道你在问什么。你是想确定一个刹车时间表吗?比如说在减速一定量后再刹车?在实际驾驶中,通常不考虑时间,而是考虑距离。

据我所知,你的问题在于你没有提出具体要求,这表明你实际上还没有弄清楚自己想要什么。如果你提供一个样例用途,我们可能可以帮助你。目前为止,你只提供了一个过度确定或者过于不确定的问题,我们无法处理。


你可以将许多不同程度的忠实度嵌入到模型中。如果一维恒定加速度是光谱中的一个极端,那么你的模型似乎偏向于另一个方向(虽然远未达到最复杂的程度)。我认为非物理、经验主义的方法是他/她在这里寻找的。 - duffymo

0

问题可能是过度约束或欠约束(a不是常数?是否有最大a?)或模棱两可。

最简单的公式是a =(Vf-V0)/ t

编辑:如果时间没有受到限制,距离s受到限制,并且加速度恒定,则相关公式为s =(Vf + V0)/ 2 * t,t =(Vf-V0)/ a,这简化为a =(Vf 2 - V0 2 )/(2s)。


好的,请告诉我们在加速度不恒定的情况下,有哪些限制条件可以确定加速度。 - Jason S
F(t) = ma(t),其中力和加速度都是时间的向量函数,当然。 - duffymo
OP 对 V0、Vf、d 和 t 给出了约束条件。如果 a 是常量,而 V0、Vf 和 t 是独立变量,则有 a = (Vf-V0)/t。我不在乎 2 分钟的打击,但我关心因为做出了诚恳的回答而被点踩却没有任何评论。否则,为什么要在这个网站上花时间尝试提供答案呢? - Jason S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接