-4

私は以前にこの質問をしましたが、プログラミングの質問ではなかったため閉鎖されました。これは完全に私が間違って言ったとおりです。これをJavaに実装したいと思います。私は小さなゲームを作成していて、船からターゲットに向かって発射される光子魚雷を持っています。魚雷の速度が遅いので、ターゲットが動いている場合、船はターゲットに当たることはありません。これを修正したいと思います。私はこれを達成するための最良の方法を見つけるために複数の理論を作成し、多くの数学的なものをマッピングし、最終的に次のことを推測しました。

  1. 光子魚雷がターゲットに到達するまでにかかる時間を見つけました。
  2. 魚雷が到着するまでにターゲットがどれだけ移動したかがわかります。
  3. 次に、ターゲットの新しい位置と元の船の間の距離を見つけます。
  4. これにより、余弦定理(SSS)を使用して、弾丸が命中する可能性がはるかに高くなるために発射する必要のある弾道を見つける機会が得られます。

これが有向グラフです:

私の問題の図

ここで、線aを正しい方向に回転させる必要がある唯一の問題は、デフォルトでは線cに平行であり、方程式全体を台無しにするためです。誰かがこれを手伝うことができますか?また、新しいポジションの提案を見つけるためのより良い方法を考えることができれば、大歓迎です。私のJavaゲームエンティティの仕組みは次のように機能します。

  1. 各エンティティには、動きを制御する2つのベクトルがあります。位置と速度。ただし、速度は速度と方向ではなく、xSpeedとySpeedであるため、完全に適切に追跡されるわけではありません。
  2. エンティティはすべてティックごとに1回更新され、魚雷を発射する船は、複数のティックを超えないように、この1ティックで将来の位置を計算する必要があります。

今回はJavaに実装するための答えが本当に必要なので、この質問を二度と閉じないようにお願いします。

これは私がこれまでに試した数学です:

        double dis = level.distanceBetween(photonTargetTop, this);

        double speed = 5;

        double time = dis / speed;

        double d1 = photonTargetTop.velocity.x * time;
        double d2 = photonTargetTop.velocity.y * time;

        double dis2 = level.distanceBetween(this, photonTargetTop.pos.x + d1, photonTargetTop.pos.y + d2);

        double dis3 = level.distanceBetween(photonTargetTop, photonTargetTop.pos.x + d1, photonTargetTop.pos.y + d2);

        double cosAngle = Math.pow(dis2, 2) + Math.pow(dis, 2) - Math.pow(dis3, 2) / 2 * dis2 * dis;

        double angle = Math.acos(cosAngle);

        EntityPhoton p = new EntityPhoton(this, level);
        p.rotation = angle;
        level.addEntity(p, pos);
4

1 に答える 1

1

対象の船に加速度がない、つまり速度と方向が変化していないと仮定しましょう。

また、一度発射されると、魚雷に加速がないと仮定しましょう。そしてそれは常に一定の速度で進みます。

また、魚雷が発射されるポイントを(0,0)と呼びましょう。

船は直線を描いています。この線上の点を選択します(船が(0,0)を通過しないコースをたどっている場合は、ウィキペディアで検索できるいくつかのジオメトリを使用して、中心位置に最も近い点を見つけることができます)。

敵船を攻撃したい位置を選択すると、(0,0)とその位置の間の距離がわかり、魚雷の速度が常に同じであるため、いつ発射するかもわかります。魚雷。次に、方向、つまりxとyに与える速度の値も見つける必要がありますが、それはそれほど難しいことではありません。

一般に、問題は複数の解決策を持つシステムです。魚雷がターゲットよりも速いと仮定すると、魚雷を攻撃できるポイントは無限にあるため、ヒューリスティックを使用して便利なポイントを選択する必要があります。

于 2013-02-06T21:23:22.960 に答える