5

位置ベクトルと速度の大きさ (多くのゲームと同様に加速度は無視) を持つミサイル A と、位置ベクトルと速度ベクトルを持つ宇宙船 B があるとします。さて、このミサイルは Nasty Missile of Seeking であり、宇宙船 B の最適なインターセプトを見つけようとします。

Missile A には 2 つの利点があります。微積分を知っていることと、多項式の根を計算できることです。ただし、ミサイル、または抽象化すると、プログラマーはまだ微積分を学んでおり、正しい方程式を持っているかどうかを知りたがっています。(多項式の根は、Netlib から実装された Jenkins-Traub Code というナイス フェローによって解決されます)

ウィット:

  • mp = ミサイルの位置

  • mv = ミサイルの速度

  • sp = 宇宙船の位置

  • sv = 宇宙船の速度

  • t = 時間

プログラマの最善の推測によると、切片の式は次のとおりです。t sp sv + t sp mv - t mp sv - t mp mv

おそらくその混乱にはいくつかの指数があるはずなので、私は完全に間違った道を進んでいると確信しています。これは解決の試みです: (sp-mp)(sv-mv)(t)

私のもう 1 つのオプションは (sp-mp)(sv-mv)^2 を微分することですが、最初にフィードバックを得たいと思いました。これは、間違っていない限り、'(sp-mp)' が '1' に解決されるためです。そして、それは...奇妙に思えます。OTOH、その機能が変化している速度は、私が探しているものかもしれません.

だから - どこで、なぜ間違ったのですか?

ありがとう。

最初のスレッドへの潜在的に役立つリンク。

編集:

方程式の合計:

(a+bx) + (c+ex)

(a+1bx^0) + (c+1ex^0)

(a+1) + (c+1)

実行不可能。

方程式の積:

(a+bx)(c+ex)

ac+aex+cbx+bex^2

多項式ではなく (Jenkins-Traub では解決できません)、正しく見えません。

ac+1aex^0+1cbx^0+2bex^1

ac+ae+cb+2bex

そして、間違いなくそうではないと思います。

4

3 に答える 3

2

ミサイルの2D運動方程式は次のとおりです(t = 0から開始すると仮定)

[ mpx(t) = mpx(0) + mvx*t , mpy(t) = mpy(0) + mvy*t ]

宇宙船の動きは

[ spx(t) = spx(0) + svx*t , spy(t) = spy(0) + svy*t ]

mpx(0) mpy(0) spx(0) spy(0)初期位置のコンポーネントはどこですか

mpx(t)=spx(t)したがって、交差するには、とが必要mpy(t)=spy(t)です。これは、2つの未知数を解くための2つの方程式です。1つは迎撃する時間tであり、もう1つは。によって与えられるミサイルの方向ですslope=mvy/mvx。または、ミサイルの初期位置mpx(0)mpy(0)、または目標インターセプト時間を与えられた速度成分である可能性があります。

あなたが何を探しているのかという質問からは明らかではありません。

于 2011-09-16T12:09:52.563 に答える
0

瞬時のソリューション

Position_Ship + t*Velocity_Ship = Position_Missile + t*Velocity_Missile

tそれらが切片に設定されている場合は、どちらの次元でも簡単に解くことができます。

決定したい場合は、Velocity_Missileもう1つの制約が必要です。

N = (Position_Missile - Position_Ship) ^ Velocity_Ship(外積)

N dot Velocity_Missle = 0

これにより、ペアまたは線形連立方程式が得られます。

動的ソリューション

が最初に与えられ、制限半径内に入るまで加速を適用したい場合Velocity_Missile、それは厄介になります。単純な追跡曲線を使用して、審美的に満足のいく解決策を得ることができます。または、数値を得ることができます...

Velocity_Missile'上からの瞬間的な解であり、対応するものを導き出します。モーターの出力を考慮して、速度の変化を提供するt'のにかかる時間を計算できます。t''これを追加t''*Ship_Velocityして、更新されたターゲット位置を取得します。繰り返します。

于 2011-09-16T15:39:34.573 に答える
0

mp、mv、sp がある場合、sv と t を計算するには:

mp+mv(t)=sp+sv(t) and |sv|=q (maxspeed)
mp+mv(t)-sp+sv(t)=0

mpx+mvx*t-spx+svx*t=0
mpy+mvy*t-spy+svy*t=0

svx^2+svy^2=q^2
svx^2+svy^2-q^2=0

次に、これを解決できます。

(mpx-spx)/t+mvx=svx
(mpy-spy)/t+mvy=svy

((mpx-spx)/t+mvx)^2+((mpy-spy)/t+mvy)^2=q^2
(mpx-spx)^2/t^2+2*mvx*(mpx-spx)/t+mvx^2+(mpy-spy)^2/t^2+2*mvy*(mpy-spy)/t+mvy^2=q^2
((mpx-spx)^2+(mpy-spy)^2)/t^2+(2*mvx*(mpx-spx)+2*mvy*(mpy-spy))/t+mvx^2+mvy^2-q^2=0
((mpx-spx)^2+(mpy-spy)^2)+(2*mvx*(mpx-spx)+2*mvy*(mpy-spy))*t+(mvx^2+mvy^2-q^2)*t^2=0
((mpx-spx)^2+(mpy-spy)^2)/(mvx^2+mvy^2-q^2)+(2*mvx*(mpx-spx)+2*mvy*(mpy-spy))/(mvx^2+mvy^2-q^2)*t+t^2=0

c = (mvx^2+mvy^2-q^2)
if   a = (2*mvx*(mpx-spx)+2*mvy*(mpy-spy))/c
and  b = ((mpx-spx)^2+(mpy-spy)^2)/c
then t = -a/2+-sqrt(a^2/4-b)

a/2 = (2*mvx*(mpx-spx)+2*mvy*(mpy-spy))/2c
a/2 = (mvx*(mpx-spx)+mvy*(mpy-spy))/c
a^2/4 = (mvx^2*(mpx-spx)^2+2*mvx*(mpx-spx)*mvy*(mpy-spy)+mvy^2*(mpy-spy)^2)/c^2

b/c^2=((mpx-spx)^2+(mpy-spy)^2)*c
b/c^2=((mpx-spx)^2+(mpy-spy)^2)*(mvx^2+mvy^2-q^2)
b/c^2=mvx^2(mpx-spx)^2+mvx^2(mpy-spy)^2+mvy^2(mpx-spx)^2+mvy^2(mpy-spy)^2-q^2(mpx-spx)^2-q^2(mpy-spy)^2

t = -(mvx*(mpx-spx)+mvy*(mpy-spy))/c +- sqrt((mvx^2*(mpx-spx)^2+2*mvx*(mpx-spx)*mvy*(mpy-spy)+mvy^2*(mpy-spy)^2)-(mvx^2(mpx-spx)^2+mvx^2(mpy-spy)^2+mvy^2(mpx-spx)^2+mvy^2(mpy-spy)^2-q^2(mpx-spx)^2-q^2(mpy-spy)^2))/c

t = -(mvx*(mpx-spx)+mvy*(mpy-spy))/c +- sqrt((2*mvx*(mpx-spx)*mvy*(mpy-spy))-(mvx^2(mpy-spy)^2+mvy^2(mpx-spx)^2)+q^2((mpx-spx)^2+(mpy-spy)^2)))/c

t = -(mvx*(mpx-spx)+mvy*(mpy-spy))/c +- sqrt(-(mvx(mpy-spy)-mvy(mpx-spx))^2+q^2((mpx-spx)^2+(mpy-spy)^2)))/c

t = -(mvx*(mpx-spx)+mvy*(mpy-spy))/c +- sqrt(-(mvx(mpy-spy)-mvy(mpx-spx))^2+q^2(c+q^2))/c
t = -(mvx*(mpx-spx)+mvy*(mpy-spy))/c +- sqrt(-(mvx(mpy-spy)-mvy(mpx-spx))^2+q^2(c+q^2))/c

t = -(mvx*(mpx-spx)+mvy*(mpy-spy))/c +- sqrt(-(mvx(mpy-spy)-mvy(mpx-spx))^2+q^2(c+q^2))/(mvx^2+mvy^2-q^2)

これ以上単純化する時間はありませんが、実行するか、評価するだけです。

次に、t を次のように接続します。

svx=(mpx-spx)/t+mvx
svy=(mpy-spy)/t+mvy

s ベクトルを取得します。

どこかで間違えたのかな…

于 2011-09-16T15:59:15.713 に答える