0

無限の 2D グリッド システム上に 2 つの点があるとします。

最初の点は、(3,5) の X、Y 座標セットにあるユーザー制御の点です。

2 番目のポイントは、(-20, 30) の X、Y 座標セットにあるコンピューター生成ポイントです。

2 番目のポイントを 1 秒ごとに最初のポイントに向かって 5 単位移動させます。最初のポイントに向かってではなく、1 秒ごとに移動する 2 番目のポイントが既にあります。

現在のようにランダムな方向ではなく、2番目のポイントを最初のポイントに向かって移動する方法を知る必要があります....

ちなみにこれはゲーム用で、ポイント2はモンスターがポイント1(プレイヤー)を追いかけています。C++でコーディングされています。

4

1 に答える 1

5

順を追って説明しましょう。

ポイント 1 は (x,y) から始まります。ポイント 2 は (x2, y2) にあります。

それらの間の勾配は m = (y2-y)/(x2-x) です。これは何を教えてくれますか?これは、点 2 から点 1 に移動したい場合、x 方向に 1 単位移動するごとに、y 方向に m 移動する必要があることを示しています。

これで、それらを互いに近づけるアルゴリズムがすでにできました! 適切な速度ではありません。

点 2 を x 方向にどれだけ移動して、y 方向にも正しい量だけ移動した後、対角方向に合計 5 単位移動するかをどのように計算するのでしょうか?

x に 1 単位、y に m 単位を移動すると、d = sqrt(1^2 + m^2) (ピタゴラスの定理) の距離を移動したことになります。

x 方向に数 X 移動したいので、y 方向に Xm 移動した後、5 単位移動します。簡単: 移動距離は d = sqrt(X^2 + (Xm)^2) です。単純に d を 5 に設定します。

5 = sqrt(X^2 + (Xm)^2)
25 = X^2 + (Xm)^2 = (m^2 + 1)*X^2
X^2 = 25/(m^2 + 1)
X = sqrt(25/(m^2 + 1))

さて、mが何であるかはすでにわかっています。したがって、プラグインして X を解くだけです。ただし、X は常に正であることに注意してください。これは、方程式を 2 乗したためです。したがって、X の正しい符号を把握する必要があります (ポイント 1 がポイント 2 の左または右にあるかどうかを確認するだけです)。

それができたら、ポイント 2 が X 単位を左または右に移動し、mX を上または下に移動する必要があることがわかります。

于 2015-02-11T00:48:31.187 に答える