動きにノイズがあるエンティティがあります。エンティティはターゲットエンティティに向かってまっすぐ進んでおり、目標到達までにどれくらいの時間がかかるかを推定しようとしています。位置の変化を繰り返しスムージングする
私はエンティティの速度をその位置履歴を見て推定しようとしています。
私はHistory<Tuple<double,Vector2D>
を持っています。これは最後のN個のポジションを持ち、何時にそのポジションを獲得しましたか?位置は一般に1秒間隔で非常に一貫して来る。
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);
}
それらは1秒で来るのでh
は常に1:
4桁の助けがありましたが、以前の位置からの速度を推定するためのより良い、より一般的な方法があるかどうかを知りたいと思いますか?反復的なことがあるので、よりスムーズなスムージングが必要な場合は、カウンタを増やすだけでよく、これはおそらく歴史の多くを使用し、スムーズさのために応答性をトレードオフします。問題は、ターゲットが適切な方向に向いている場合には、非常に不安定で、論理的には、十分なサンプルがあれば、そこに到達するまでの時間をかなり正確に推定することができます。