【问题标题】:(Quadratic?) Interpolation of data to find sector crossing time(二次?)数据插值以找到扇区交叉时间
【发布时间】:2015-12-22 13:32:50
【问题描述】:

我正在以每秒 60 次的速度从移动的车辆(游戏中的赛车)接收数据。我想(尽可能准确地)确定车辆穿过某个扇区的时间(沿着轨道在某个指定的目标距离处)。由于更新率有限,我总是会在扇区之前收到一个样本,在扇区之后收到一个样本,所以我需要在这两个点之间进行插值,以找到跨越扇区的时间(介于两者之间)。

我收到的每次更新的数据包含:

  • 更新时间t
  • p 沿轨道的位置(百分比为 0-1)
  • 车辆的速度v

我可以仅使用时间和距离来使用简单的线性插值,但它不够准确。例如,如果交叉前的样本有时间t0和位置p0,交叉后的样本有t1p1,交叉位置是p,那么交叉时间@987654329 @来自线性插值应该是:

t = t0 + (p - p0) / (p1 - p0) * (t1 - t0)

这是相对简单的 - 它假设一个恒定的速度

v = (p1 - p0) / (t1 - t0)

并使用它来确定从p0p 需要多长时间。

但是,我不想假设速度恒定,我拥有两个样本的速度并且它不相等。

如何考虑使插值更准确所需的速度?我假设我需要使用某种二次插值而不是线性,我假设两个样本之间的速度线性变化(因此时间呈二次方),但我看不出我应该如何做到这一点。

【问题讨论】:

    标签: interpolation


    【解决方案1】:

    这完全取决于您对系统的假设,您说您不想假设恒定速度,您能否假设恒定加速度?至少在时间范围内,如果两者都没有,您可以将其视为样条线。

    基本上你所拥有的是两个点及其导数,你可以从中得到的最多的是三次插值而不做任何假设

    公式来自Wikipedia Spline Interpolation

    F(t0) = p0
    F(t1) = p1
    dF(t0)/dt = v0
    dF(t1)/dt = v1
    
    F(t) = (1-k)*p0 + k*p1 + k*(1-k)*(a*(1-k) + b*k)
    where
    k = (t-t0) / (t1-t0)
    a = v0*(t1-t0) - (p1-p0)
    b = -v1*(t1-t0) + (p1-p0)
    

    请注意,这会给你一个三次函数F(t)=p,你必须解决它才能得到你想要的函数T(p)=t,因为我们没有假设任何东西,所以不能保证它是正数并且一直增加,您可能会获得非常高的加速度或负速度。

    【讨论】:

      猜你喜欢
      • 2015-01-04
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 2023-03-27
      相关资源
      最近更新 更多