1

这篇相当有用的 CodeProject 文章中,一位有进取心且非常乐于助人的人已经完成了牛顿导弹击中牛顿目标所需的数学运算(它也适用于匹配宇宙飞船之间的航向和速度,只需稍微调整输入)。

我过去写过的其中一件事是多达数百艘宇宙飞船(块)之间的战斗,相互发射导弹(块)。相当整洁。

然而,它只适用于纯牛顿飞行器,而且任何在大多数太空模拟器中关注飞行的人都可以告诉你(或者喜欢推测 FTL 方法的人),牛顿飞行器并不是唯一的飞行方式。

在我看来,有了这么多出色的计算机硬件,应该有一个计算机程序可以采用 p+v*t+0.5*a*t*t = P+V*t+0.5*A* t*t 并吐出给你 t 和 A 的方程(或 a,取决于追求者是在左边还是在右边)。

代数器是我发现的最接近的(MATLAB 可能会胜出,但我没有2,100 美元的预算),但如果我用 1 列、2 行向量“矩阵”替换,就会窒息。(我有 4.2,而不是 5)

所以 - 帮我在群星之间制造大屠杀?我不是要打败 MiB 的邪恶外星霸主,我保证!:D

编辑:我不是在寻找解方程;我正在寻找可以给我这些解方程的软件。

谢谢。

4

1 回答 1

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 的导弹,我想找到大小为 M 的导弹速度 v1,它会导致导弹最终与飞船相撞。

A:你正在尝试求解方程组

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。

编辑2:

问:给定一个初始位置为 q0、初始速度为 v0、恒定加速度为 a0 的宇宙飞船,以及一个初始位置为 q1 和初始速度为 v1 的导弹,我想找到大小为 M 的导弹加速度 a1,它会导致导弹最终发生碰撞与宇宙飞船。

A:这个问题和第一个很相似;你现在的方程式是

q0 + v0 t + 1/2 a0 t^2 = q1 + v1 t + 1/2 a1 t^2
a1 . a1 = M^2

其中 a1 和 t 未知。同样,这些方程可以组合起来得到一个具有已知系数的 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。

于 2011-09-02T07:19:09.037 回答