【问题标题】:How to calculate deceleration needed to reach a certain speed over a certain distance?如何计算在一定距离内达到一定速度所需的减速度?
【发布时间】:2009-07-06 17:03:32
【问题描述】:

我已经为此尝试了典型的物理方程,但它们都没有真正起作用,因为方程处理恒定加速度,而我的方程需要更改才能正常工作。基本上,我有一辆可以在很大范围内行驶的汽车,当它到达路径的尽头时,需要在给定的距离和时间内减速和停车。

所以,我有:
V0,或当前速度
Vf,或我想要达到的速度(通常为 0)
t,或我的时间量想要到达我的路径的尽头
d,或者当我从 V0 变为 Vf 时我想要走的距离

我要计算
a,或者从V0到Vf所需的加速度

这成为一个特定于编程的问题的原因是因为a 需要在汽车不断停止时在每个时间步重新计算。因此,V0 不断地从上一个时间步 plus 更改为 V0,即上一个时间步计算的 a。所以本质上它会开始慢慢停止,然后最终会更突然地停止,有点像现实生活中的汽车。

编辑:
好的,感谢您的精彩回复。我需要的很多东西只是思考这个问题的一些帮助。现在让我更具体一些,因为我从你们那里得到了更多的想法:

我有一辆车c,它是从目的地64 pixels,所以d=64。它在2 pixels per timestep 行驶,其中timestep is 1/60 of a second。我想找到加速度a,它会在它经过d时达到0.2 pixels per timestep的速度。
d = 64 //distance
V0 = 2 //initial velocity (in ppt)
Vf = 0.2 //final velocity (in ppt) p>

同样因为这发生在游戏循环中,变量delta 被传递给每个动作,即multiple of 1/60s that the last timestep took。换句话说,如果花费了 1/60s,那么 delta 是 1.0,如果花费了 1/30s,那么 delta 是 0.5。在实际应用加速度之前,它乘以这个增量值。同样,在汽车再次移动之前,它的速度乘以 delta 值。这是相当标准的东西,但它可能是导致我的计算出现问题的原因。

【问题讨论】:

  • 对不起,我觉得你对物理学的理解有些混乱。 F = ma 告诉您变化的加速度与变化的力有关。汽车在现实生活中不会“更突然”停下来,除非你用力踩踏板来增加制动力。
  • @duffymo:从技术上讲,当事情从慢到停止时,你会感觉到减速结束时的猛拉,因为动态摩擦让位于静态摩擦;静摩擦大于动摩擦。
  • ...但是,如果您想获得详细信息,则必须对传输以及道路与轮胎之间以及轮胎与底盘之间的弹性进行建模。
  • @Jason S:当实际减速度降至零时,悬架也会弹回。结合静摩擦钻头,这使得乘客的体验相当复杂。

标签: physics acceleration


【解决方案1】:

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

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

编辑

在你编辑之后,让我试着衡量你需要什么......

如果您采用此公式并插入您的数字,您将获得 -0,0309375 的恒定加速度。现在,让我们继续将此结果称为“a”。

时间戳(帧?)之间需要的实际上不是加速度,而是车辆的新位置,对吧?所以你使用以下公式:

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

其中Sd是当前在当前帧/时刻/sum_of_deltas处距起始位置的距离,Vi是起始速度,t是起始时间。

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

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

location = non_linear_function(time);

【讨论】:

  • 真的,多么可怕的错字。谢谢。
  • 公式,以及修复了一些错别字,添加了额外的想法。
【解决方案2】:

您给出的四个约束对于线性系统(一个具有恒定加速度的)来说太多了,其中任何三个变量都足以计算加速度,从而确定第四个变量。但是,该系统的方式低于 - 为完全一般的非线性系统指定 - 可能有无数种方法可以随时间改变加速度,同时满足给定的所有约束。您能否更好地指定应随时间变化的曲线加速度?

给定线性变化的加速度,使用 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 中留下 2 个线性方程,因此您可以解决这些问题(但我保留这种形式是为了更容易仔细检查我的推导!!!)。

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

【讨论】:

  • 你说得对——我可能应该使用线性系统。只要看起来自然,我就不太在乎为什么或如何,所以保持简单会更好。当您将它作为曲线提出并且我真的考虑过时,无论如何都不太可能需要曲线。我想不出与我正在寻找的指数图相匹配的指数图,但我能想到几个线性图。如果我使用线性减速,我只需要计算一次(当 t==0 时)还是如果我每个时间步都重新计算它仍然有效?
  • 编辑我的答案,以格式正确的方式回答这些进一步的问题
【解决方案3】:

如果您试图在方程式中模拟随时间变化的加速度,这仅意味着您应该假设。您必须将 F = ma 与加速度方程结合起来,仅此而已。如果加速度不是恒定的,你只需要求解一个方程组而不是一个方程组。

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

如果您假设 1D 运动,那么您需要三个联立方程。速度和位移都非常简单。

【讨论】:

  • 嘿 duffymo,感谢您的回复。我确实指的是人们通常的驾驶方式 - 当您远离停止时,将脚轻轻踩在制动器上,然后在您即将到达时用力踩下它,通常会导致小的“倾斜”汽车向前承载着它的重量。力和质量对我的问题并不重要(我认为);我只关心加速度随时间的变化,m/s/s。您可以假设每辆车的质量为 1,因此力基本上就是速度。
  • "力和质量对我的问题并不重要(我认为);我只关心加速度,因为速度随时间的变化,m/s/s。你可以假设每辆车都有质量1,所以力本质上就是速度。” - 我不同意。您可能会争辩说您想采用一种并非 100% 忠实于物理学的经验方法,但让我们承认它的本质。加速度只是一件事 - 速度相对于时间的变化率,一阶张量。没有其他定义。
【解决方案4】:

在现实生活中,汽车的停止能力取决于制动踏板上的压力、正在进行的任何发动机制动、表面条件等:此外,当汽车真正停止时,最后还有“抓地力”。建模很复杂,您不太可能在编程网站上找到好的答案。找一些汽车工程师。

除此之外,我不知道您要什么。您是否正在尝试确定制动时间表?就像在滑行时有一定程度的减速,然后刹车?在实际驾驶中,这些动作通常不考虑时间,而是考虑距离。

据我所知,你的问题是你没有要求任何具体的东西,这表明你真的没有弄清楚你真正想要什么。如果您为此提供示例使用,我们可能会为您提供帮助。实际上,您已经提供了一个问题的基本结构,要么是过度确定的,要么是限制不足的,我们真的无能为力。

【讨论】:

  • 您可以在模型中嵌入许多级别的忠诚度。如果一维恒定加速度是频谱中的一个极端,那么您的在另一个方向上似乎有点太远了(尽管甚至不接近最复杂的)。我认为非物理学的经验方法是她/他在这里寻找的。​​span>
【解决方案5】:

如果您需要在 1m 内以线性加速度从 10m/s 到 0m/s,您需要 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

【讨论】:

    【解决方案6】:

    问题要么过度约束,要么约束不足(a 不是常数?是否存在最大值?)或不明确。

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

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

    【讨论】:

    • 呜呜呜。如果不是恒定的,请告诉我们有助于确定加速度的约束条件。
    • F(t) = ma(t),当然,力和加速度都是时间的向量函数。
    • OP 对 V0、Vf、d、t 进行了限制。如果 a 为常数,V0、Vf 和 t 为自变量,则 a = (Vf-V0)/t。我不关心 2 点命中,但我确实关心在没有评论的情况下被否决以做出诚实的回答。否则为什么要花时间在这个网站上给出答案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 2011-02-07
    • 2018-04-20
    • 1970-01-01
    • 2022-08-23
    相关资源
    最近更新 更多