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

Physics 如何计算在一定距离内达到一定速度所需的减速度?,physics,acceleration,Physics,Acceleration,我尝试过典型的物理方程,但没有一个真正起作用,因为方程涉及恒定加速度,我的方程需要改变才能正确工作。基本上,我有一辆车,可以在很大的速度范围内行驶,需要减速,并在到达路径终点时在给定的距离和时间内停车 所以,我有: V0,或当前速度 Vf,或我想要达到的速度(通常为0) t,或我想要到达路径终点的时间量 d,或者当我从V0变为Vf时想要走的距离 我要计算 a,或从V0到Vf所需的加速度 这成为一个特定于编程的问题的原因是,当汽车不断停车时,a需要每一个时间步重新计算一次。因此,V0不断地被更改为

我尝试过典型的物理方程,但没有一个真正起作用,因为方程涉及恒定加速度,我的方程需要改变才能正确工作。基本上,我有一辆车,可以在很大的速度范围内行驶,需要减速,并在到达路径终点时在给定的距离和时间内停车

所以,我有:
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。在实际应用加速度之前,它将乘以此增量值。类似地,在汽车再次移动之前,其速度将乘以增量值。这是非常标准的东西,但这可能是导致我的计算出现问题的原因。

对于一个线性系统(具有恒定加速度的系统),您给出的四个约束太多了,其中任何三个变量都足以计算加速度,从而确定第四个变量。然而,对于一个完全一般的非线性系统,该系统的规定还远远不够——在满足给定的所有约束条件的同时,可能会有无数种无限的方式随时间改变加速度。您能否更好地指定沿什么样的曲线加速度应随时间变化

在给定线性变化加速度的情况下,使用0表示“开始”,1表示“结束”,D表示δ表示“变化”

  a(t) = a0 + t * (a1-a0)/Dt
其中a0和a1是我们想要计算的两个参数,以满足所有各种约束条件,我计算(如果没有错步,就像我手工做的那样):

给定DV,Dt和Ds都给定了,这就在未知量a0和a1中留下了两个线性方程组,这样你就可以求解它们了(但我把东西保留在这种形式,以便更容易地对我的导数进行双重检查!!!)


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

问题要么是过度约束,要么是欠约束(a不是常数?是否存在最大值a?)或者模棱两可

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


编辑:如果时间不受约束,距离s受约束,加速度是恒定的,那么相关的公式是s=(Vf+V0)/2*t,t=(Vf-V0)/a,它简化为a=(Vf2-V02)/(2s)。

如果你试图在方程中模拟与时间相关的加速度,这只意味着你应该假设。你必须积分F=ma和加速度方程,就这样。如果加速度不是常数,你只需要解一个方程组而不是一个方程组

所以现在你必须同时积分三个向量方程:位移、速度和加速度的每一个分量,或者总共九个方程。作为时间函数的力将是问题的输入


如果你假设一维运动,你可以归结为三个联立方程组。速度和位移都很简单。

直线加速度
a
表示从起始速度
Vi
到最终速度
Vf
的距离
d

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

在你的编辑之后,让我试试看你需要什么

如果你使用这个公式并插入你的数字,你会得到-00309375的恒定加速度。现在,让我们继续称这个结果为“a”

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

Sd = Vi * t + 0.5 * t * t * a
式中,Sd是当前帧/力矩/三角洲和时距开始位置的距离,Vi是开始速度,t是开始后的时间

这样,你的减速是恒定的,但即使是线性的,你的速度也会适应你的限制

如果你想要一个非线性的去加速,你可以找到一些非线性的插值方法,插值的不是加速度,而只是两点之间的位置

location = non_linear_function(time);
在现实生活中,一个
location = non_linear_function(time);
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