【问题标题】:Space Physics for missiles, spaceships - Learning Calculus edition导弹、宇宙飞船的空间物理学 - 微积分学习版
【发布时间】:2011-09-16 04:12:39
【问题描述】:

假设我们有导弹 A,带有位置矢量和速度大小(忽略加速度,就像许多游戏一样)和飞船 B,带有位置和速度矢量。现在,这枚导弹,作为一种令人讨厌的寻找导弹,将尝试为宇宙飞船 B 找到最佳拦截。

Missile A 有两个优点:它知道微积分,并且可以计算多项式的根。然而,导弹,或者抽象地说,程序员,还在学习微积分,想知道他是否有正确的方程。 (多项式根将由一个名为 Jenkins-Traub Code Implemented From Netlib 的好人来解决)

也就是说:

  • mp = 导弹位置

  • mv = 导弹速度

  • sp = 飞船位置

  • sv = 飞船速度

  • t = 时间

根据程序员的最佳猜测,截距的等式是: tspsv + tspmv - tmpsv - tmpmv

除非我很确定我完全走错了路,因为在那个混乱中可能应该有一些指数;这是解决问题的尝试: (sp-mp)(sv-mv)(t)

我的另一个选择是区分 (sp-mp)(sv-mv)^2,但我想先获得反馈,部分原因是,除非我弄错了,否则 '(sp-mp)' 会解析为 '1' .这似乎......奇怪。 OTOH,该功能的变化速度可能是我正在寻找的。​​p>

那么 - 我做错了什么,在哪里以及为什么?

谢谢。

Potentially-useful link to first thread.

编辑:

对等式求和:

(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

我认为绝对不是那样。

【问题讨论】:

  • 你忘了说飞船和导弹能控制什么。他们可以加速还是减速?他们能改变方向吗,...
  • 我的评论是总是从一个好的草图开始。一旦您将所有对象和变量放在草图上,解决方案将变得更加明显。当我学习如何使用 BASIC 编程时,你提醒我解决了这个问题(使用重力)。当你自己弄清楚时,你最好学习。
  • 什么是未知数?您要计算的数量是多少? “截距方程”是什么意思?
  • 啊,对不起。为了:这被忽略了,此时最好的拦截就是所需要的。好吧,是的,我正在尝试自己弄清楚;感谢您提出草图的建议。我试图推导出一个多项式方程,它给出了在给定这一瞬间的值的情况下,导弹可以拦截宇宙飞船的时间。为什么是多项式方程?嗯,一定是某种方程。而且我知道多项式会起作用。
  • 没有加速度的方程是线性的。不需要多项式。借助重力,您将获得二阶多边形。

标签: math physics calculus


【解决方案1】:

导弹的二维运动方程为(假设从 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)。这是解决两个未知数的两个方程。一个可能是拦截t的时间,另一个可能是slope=mvy/mvx给出的导弹方向。或者它可以是导弹mpx(0)mpy(0)的初始位置,或者给定目标拦截时间的速度分量。

从问题中不清楚您在寻找什么。

【讨论】:

  • 它必须是两个的东西,因为有两个方程。
  • 啊,这很有道理。另一件事是导弹移动的方向。
【解决方案2】:

瞬时解决方案

Position_Ship + t*Velocity_Ship = Position_Missile + t*Velocity_Missile

如果它们被设置为拦截,那么您可以在任一维度上轻松求解 t

如果你想确定Velocity_Missile,我们还需要一个约束。

N = (Position_Missile - Position_Ship) ^ Velocity_Ship(交叉产品)

N dot Velocity_Missle = 0

这将为您提供一对或线性联立方程。

动态解决方案

如果最初给出Velocity_Missile,并且我们想要应用加速直到我们到达限制半径内,那么它就会变得棘手。您可以使用简单的追求曲线获得美观的解决方案,或者我们可以得到数值......

Velocity_Missile' 是上面的瞬时解,推导出相应的t',给定电机的功率,您可以计算t'' 传递速度变化所需的时间。添加此t''*Ship_Velocity 以获得更新的目标位置。迭代。

【讨论】:

  • 谢谢,但我正在寻求帮助以自己解决问题,而不是寻求解决方案。 :)
【解决方案3】:

如果你有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 向量。

也许我在某个地方做错了……

【讨论】:

  • 谢谢,但我正在寻求帮助以自己解决问题,而不是寻求解决方案。 :)
猜你喜欢
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 2021-07-27
  • 1970-01-01
相关资源
最近更新 更多