(二次?)数据的插值以找到扇区交叉时间

时间:2015-12-22 13:32:51

标签: interpolation

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

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

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

我能够仅使用时间和距离进行简单的线性插值,但不够准确。例如,如果交叉前的样本有时间t0和位置p0,则交叉后的样本有t1p1,且交叉位置为{{ 1}},那么线性插值的交叉时间p应为:

t

这相对简单 - 假设

的速度恒定
t = t0 + (p - p0) / (p1 - p0) * (t1 - t0)

并使用它来确定从v = (p1 - p0) / (t1 - t0) p0所需的时间。

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

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

1 个答案:

答案 0 :(得分:0)

这一切都取决于你对你的系统有什么假设,你说你不想假设恒定速度,你能不能加速?至少在时间范围内,如果两者都没有,你可以认为它像样条曲线。

enter image description here

基本上你所拥有的是两点,它的衍生物,你可以从它得到的最多是一个三次插值而不做任何假设

来自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,因为我们没有做任何事情,所以不能保证是积极的并且一直在增加,你可以获得非常高的加速度或负速度。