我有一个在运动中有噪音的实体。该实体正朝着目标实体前进,我试图估计它需要多长时间才能实现目标。迭代平滑位置变化
我想通过查看其位置历史来估计实体的速度。
我有一个History<Tuple<double,Vector2D>
它有最后N个位置,我什么时候得到那个位置。这些职位通常以1秒的间隔非常一致地出现。
我尝试了一些自制的公式,其中XTK [N]是[N]秒前组分(X或Y):
private double GetFirstOrderVelocity(double xtk, double xtk1, double h)
{
return (xtk - xtk1)/h;
}
private double GetSecondOrderVelocity(double xtk, double xtk2, double h)
{
return (xtk - xtk2)/(h*2);
}
private double GetThirdOrderVelocity(double xtk, double xtk1, double xtk2, double xtk3, double h)
{
return (xtk + xtk1 - xtk2 - xtk3)/(h * 4);
}
private double GetFourthOrderVelocity(double xtk, double xtk1, double xtk3, double xtk4, double h)
{
return (xtk + (2 * xtk1) - (2 * xtk3) - xtk4)/(h * 8);
}
哪里h
始终为1,因为他们以1秒进来间隔。
第四顺序有帮助,但我想知道是否有更好更一般的方法来估计以前职位的速度?有些东西是迭代的,所以如果我需要更强的平滑,我只需要增加一个计数器,它可能会使用更多的历史记录,并会平滑响应性。现在的问题是,如果某个目标正在朝某个方向发展,那么定位的时间非常紧张,并且在逻辑上,如果有足够的样本,我们就可以开始相当准确地估计到目标为止的时间。