我有一個在運動中有噪音的實體。該實體正朝着目標實體前進,我試圖估計它需要多長時間才能實現目標。迭代平滑位置變化
我想通過查看其位置歷史來估計實體的速度。
我有一個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秒進來間隔。
第四順序有幫助,但我想知道是否有更好更一般的方法來估計以前職位的速度?有些東西是迭代的,所以如果我需要更強的平滑,我只需要增加一個計數器,它可能會使用更多的歷史記錄,並會平滑響應性。現在的問題是,如果某個目標正在朝某個方向發展,那麼定位的時間非常緊張,並且在邏輯上,如果有足夠的樣本,我們就可以開始相當準確地估計到目標爲止的時間。