0

与えられたX、Yポイントで前後左右に動く可能性のあるオブジェクトが与えられます。最も効率的で人間の自然な方法で、与えられた動きの仕組みを使用して、オブジェクトをX、Yポイントに効率的に向ける方法。

オブジェクトはリアルタイムで移動できます。「startMoving|Direction |()」および「stopMoving | Direction |()」と指示することができます。追加のひねりと私が問題を抱えている部分として、オブジェクトの向きは決して知られていないが、その現在の位置だけがわかっているので、アルゴリズムは方向を「検出」する必要があります。オブジェクトの場所は、500〜1秒間隔で別のスレッドで更新されます。アルゴリズム内の場所を更新するための「リクエスト」はいつでも行われますが、すぐに利用できるわけではなく、アルゴリズムはそれを考慮に入れる必要があります。requestAndWaitForCoordUpdate()のようなことをすることは完全に受け入れられますが、おそらく必要ではありません。

さらに、障害物は表示されません。ほとんど開いた平面上にあり、パス間の直線から遠く離れていると想定でき、障害物に遭遇する可能性があります。ターゲットとソースの間の距離の1/4は、特定の直接パスで幅が利用可能であると想定するのが安全です。

また、このシナリオでA *が適用されるかどうかわからないことにも言及します。適用される場合は、制約を考慮してA*を実装する方法がわかりません。ここでの唯一の実変数は、オブジェクトの向きです。

次にいくつかのサンプルコードを示します。

public int[] currentCoords;
public void movement() {
  currentCoords[0] = 1005; // starting y coord
  currentCoords[1] = 1007; // starting x coord
  moveTo(1050, 1025);
}

public void moveTo(int x, int y) {
  ... how?
}

public void threadUpdatingCoords() {
   ... periodically check for source coord updates
   ... between 200ms and 1000ms apart.
}
4

1 に答える 1

1

最適なルートを計算するには、A* アルゴリズムを使用する必要があります。ただし、最も人間的な方法で行うには、歩かせてランダ​​ムな方向に向けるだけです。賢い人間でない限り、彼は右手を壁に突き刺し、タッチを失わずに歩き続けます。最終的には目的地に到着します。

人間は効率的ではなく、ランダムです。A* はランダムではなく、効率的です。

于 2011-03-21T21:19:14.440 に答える