4

推測航法は、以前に決定された位置に基づいて現在の位置を推定し、経過時間とコースに対する既知または推定速度に基づいてその位置を進めるプロセスです。」(ウィキペディア)

私は現在、推測航法の最適化を利用する単純なサーバーを実装しています。これは、クライアントとサーバーの両方で論理的な仮定を行うことにより、必要な更新を最小限に抑えます。

ユーザーが制御するオブジェクトは、回転している、または回転していないと言えます。これは、推測航法に問題をもたらします (私の見方です)。

たとえば、[位置、速度、回転: 左/右/いいえ] で定義された時点Aがあるとします。ここで、 t時間後にポイントBが必要になります。回転していないときは、新しい位置は簡単に推測できます。結果の方向も簡単に推定できます。しかし、これら 2 つの要因が組み合わさるとどうなるでしょうか。オブジェクトがt時間回転するにつれて、速度の方向は曲線に沿って変化します。

おそらく別の解決策を採用する必要がありますか(サーバーに「今左に曲がっています」と伝えるのではなく、新しい方向ごとにクライアントに更新を送信させるなど)?

ちなみに、これは簡単にするために 2D 空間にあります。

4

2 に答える 2

2

簡単にするために、車両の回転半径 r が速度に依存しないとします。したがって、初期座標と時間を指定して新しい位置を計算するには、次のようにします。

  • 距離を計算します (速度 * 時間)
  • どのくらい回転したかを計算します (距離 / (2*pi*r))
  • その円弧を元の位置に追加します。

最後の手順には詳細が必要です。

ステップ 2 で計算された角度 a が与えられた場合、(0,0) で真北方向 (つまり pi/2 ラジアン) で開始し、左に曲がる場合、新しい位置は (r cos(a)-1, r罪(a))。

元の見出しが「b」だった場合は、それに応じて新しい位置を回転させます。つまり、次の回転行列を掛けます。

 [ cos b , -sin b ]
 [ sin(b), cos(b) ]

最後に、初期位置を追加して完了です。これで、速度または回転方向を変更した場合にのみ更新を送信する必要があります。

于 2009-08-11T15:45:59.307 に答える
1

ええと、「回転: 左/右/いいえ」では位置 B を判断するには不十分だと思います。また、回転が行われている弧を知る必要もあります。半径 1 の円軌道に沿って左折する場合、半径 10 の円軌道に沿って右折する場合とは異なる場所に到達します。同じ。

クライアントに新しい方向ごとに更新を送信させ、それらを線形セグメントとして扱うことがオプションである場合、それははるかに簡単な計算になります。クライアントからの新しい各レポートを単純にベクトルとして扱い、それらを合計することができます。曲線の束を計算することは、より複雑になります。

于 2009-08-11T15:44:21.570 に答える