在this相当有用的CodeProject文章中,一个积极进取且非常有帮助的人已经完成了牛顿导弹击中牛顿目标所需的数学运算(它也适用于匹配太空船之间的航向和速度,有点摆弄投入物。)
我过去曾写过的其中一件事就是多达数百艘宇宙飞船(模块)之间的战斗,相互发射导弹(模块)。相当整洁。
然而,它只适用于纯粹的牛顿工艺,并且任何在大多数空间模拟器中注意飞行的人都可以告诉你(或者谁喜欢推测的FTL方法),牛顿不是唯一的方法飞翔。
在我看来,对于所有这些精彩的计算机硬件,应该有一个计算机程序,例如,p + v * t + 0.5 * a * t * t = P + V * t + 0.5 * A * t * t并吐出方程式,给你t和A(或a,取决于追求者是左侧还是右侧)。
Algebrator最接近我发现的(MATLAB可能能够获得它,但是我 Not 的预算是2,100美元),但如果我用1-collumn代替2,那就会窒息-row vector" matrices"。 (我有4.2,而不是5)
所以 - 帮助我在星星之间造成大屠杀?我不是一个邪恶的外星人霸主击败MiB,承诺! :d
编辑:我不是在寻找解方程式;我正在寻找可以给我这些解决方案的软件。
感谢。
答案 0 :(得分:1)
我仍然不完全确定你要做什么。如果你想在代码写入时解决代数方程,Wolfram Alpha非常有用,例如http://www.wolframalpha.com/input/?i=Solve%5Bq0+%2B+v0+t+%2B+a0%2F2+t%5E2+%3D%3D+q1+%2B+v1+t+%2B+a1%2F2+t%5E2%2C%7Ba1%2Ct%7D%5D
如果你想在运行时求解代数方程,那一般来说这是一个非常难的问题。如果你给我更多关于你想要做什么的细节,我可能会推荐一些好的免费套餐。
编辑:您可能尝试解决的示例问题:
问:给定一个初始位置为q0,初始速度为v0,恒定加速度为a0的飞船,以及一个初始位置为q1的导弹,我想找到导弹速度v1,其大小为M,导致导弹最终与之碰撞宇宙飞船。答:你正试图解决方程组
q0 + v0 t + 1/2 a0 t^2 = q1 + v1 t
v1 . v1 = M^2
对于向量v1,其中影响时间t也是未知的。这个系统很难以封闭的形式解决,据我所知:Wolfram Alpha扼杀了它,甚至Mathematica也很难。然而,用数值方法攻击它相对简单。为此,我们首先通过将第一个等式插入第二个等式来解决t:
(q0 - q1 + v0 t + 1/2 a0 t^2) . (q0 - q1 + v0 t + 1/2 a0 t^2) == M^2 t^2
这是t中的四次多项式,具有已知系数:
[(q0 - q1).(q0-q1)] + [2 (q0 - q1).v0] t + [v0.v0 + (q0-q1).a0 - M^2] t^2 + [v0.a0] t^3 + [1/4 a0.a0] t^4 = 0
括号中的所有内容都是您可以根据已知数量计算的标量。要找到这个四分之一的根,请使用黑盒根解算器(我强烈推荐Jenkins-Traub:C ++代码可从www.crbond.com/download/misc/rpoly.cpp获得,Java和Fortran版本也在净)。
一旦你有了根,选择最小的正面(这个将与导弹尽可能早地击中太空船的方向相对应)并将其插入第一个等式,并轻松解决v1。
EDIT2:
问:考虑到初始位置为q0,初始速度为v0,恒定加速度为a0的飞船,以及初始位置为q1和初始速度为v1的导弹,我想找到导致导弹的导弹加速度a1,其幅度为M最终与宇宙飞船相撞。 答:这个问题与第一个非常相似;你的方程现在是q0 + v0 t + 1/2 a0 t^2 = q1 + v1 t + 1/2 a1 t^2
a1 . a1 = M^2
a1和t未知的地方。同样,这些方程可以组合在一起得到一个已知系数的四次方:
[(q0 - q1).(q0-q1)] + [2 (q0 - q1).(v0-v1)] t + [(v0-v1).(v0-v1) + (q0-q1).a0] t^2 + [(v0-v1).a0] t^3 + [1/4 a0.a0 - 1/4 M^2] t^4 = 0
再次,使用Jenkins-Traub找到根,然后将最小的正根插入第一个等式,并求解a1。