我已经开始为游戏服务器开发单位轨迹,现在我正试图在给定时间检索单位的位置。当轨迹只是一条直线时很容易,但当一个单位追逐另一个单位时,情况就复杂得多了。
我已经完成了Flash 应用程序来说明问题。黑色轨迹适用于单向行进的单元。蓝色追逐黑色,红色追逐蓝色。我想要的是预先计算蓝色和红色的整个轨迹,以便能够在恒定时间内检索它们的位置。
是否可以?谢谢你的帮助!!
我已经开始为游戏服务器开发单位轨迹,现在我正试图在给定时间检索单位的位置。当轨迹只是一条直线时很容易,但当一个单位追逐另一个单位时,情况就复杂得多了。
我已经完成了Flash 应用程序来说明问题。黑色轨迹适用于单向行进的单元。蓝色追逐黑色,红色追逐蓝色。我想要的是预先计算蓝色和红色的整个轨迹,以便能够在恒定时间内检索它们的位置。
是否可以?谢谢你的帮助!!
这是一篇论文卡尔·E·蒙根从物理学的角度解决了一个经典的追逐问题,它解决了一个特定版本,其中追逐者最初垂直于被追逐对象的轨迹。我相信这是解决方案的一个无关紧要的元素,因为垂直性沿着轨迹的其余部分消失了。
它是一个微分方程的自治系统,因为时间没有明确地出现在方程的系数或项中。这支持了论文中给出的解决方案系列足够通用以提供非垂直初始条件的想法。
该论文提供了进一步的链接和参考资料,以及一个有用的搜索词“追求曲线”。
让我们陈述一个稍微不同的、比蒙根的更一般的初始条件。假设被追逐的物体(“船”)最初位于原点,并以恒定速度 V 沿正 y 轴(x=0)上行。追逐的物体(“鱼雷”)最初位于 (x0,y0) ,并且虽然直接在“船”上瞬时重新定向,但也以某个恒定速度 v 行进。
x0 为零的特殊情况导致线性追赶曲线,即迎头碰撞或尾随追赶,因为 y0 为正或负。否则,通过在 y 轴上的反射,我们可以假设 x0 > 0 而不失一般性。因此,x 坐标的有理幂将被明确定义。
为了我们的直接目的,假设速度 V,v 不相等,因此比率 r = V/v 不是 1。以下是类似于 Mungan 方程 (10) 的“鱼雷”曲线的闭合形式解 (1):
(1+r) (1-r)
[ (x/H) (x/H) ]
(y/H) = (1/2) [ ----- - ----- ] + C (1)
[ (1+r) (1-r) ]
其中常数 H,C 可由初始条件确定。
应用最初鱼雷在原点向船舶位置移动的条件,我们对 (1) 中的 x 求导数,并从两侧取消因子 1/H:
r -r
dy/dx = (1/2) [ (x/H) - (x/H) ] (2)
现在将曲线在初始点 (x0,y0) 处的斜率 dy/dx 与通过原点的直线的斜率相等:
r -r
(x0/H) - (x0/H) = 2y0/x0 = K (3)
这相当于正B = (x0/H)^r的二次方程:
B^2 - K*B - 1 = 0 (4)
即 B = [K + sqrt(K^2 + 4)]/2 (但如果 K < 0 则使用替代形式以避免取消错误),这允许根据我们对 x0 和 r 的知识确定 H:
H = x0/(B^(1/r)) (5)
知道 H 使得通过将初始点 (x0,y0) 代入那里来确定 (1) 中的加法常数 C 变得很简单。
棘手的部分将是确定“鱼雷”轨迹上的哪个点对应于给定时间 t > 0。该问题的逆问题相当简单地解决。给定轨迹上的一个点,使用导数公式(2)找到该点的切线,并从该线的 y 截距 b (即从当前“船”位置)推导出时间 t:
t = b/V (6)
因此,在给定时间 t > 0 确定“鱼雷”所在的 (x(t),y(t)) 本质上是一种寻根练习。人们很容易将所需的 x(t) 括在两个 x 坐标 x1 和 x2 之间,它们对应于时间 t1 和 t2,使得 t1 < t < t2。可以使用寻根方法来细化这个区间,直到达到所需的精度。一旦细化了一个相当小的区间,牛顿法将提供快速收敛。我们可以在下一部分中查看此类过程的详细信息!
我可以为您设置问题,但无法解决。
黑色曲线以恒定速度 v0 直线运动。
蓝色曲线以恒定速度 v1 向黑色方向移动。
为简单起见,选择坐标以便在时间 t=0 时黑色曲线从 (x=0, y=0) 开始并沿 x 方向移动。
因此,在时间 t >= 0 时,黑色曲线的位置为 (v0 t, 0)。
问题陈述
目标是在给定初始位置 (x(t=0), y(t=0)) 的情况下找到时间 t >= 0 的蓝色曲线的 x, y。运动的微分方程是
dx / dt = v1 (v0 t - x) / a(t)
dy / dt = v1 (- y) / a(t)
其中 a(t) = sqrt((v0 t - x)^2 + (y^2)) 是时间 t 时蓝色和黑色之间的距离。
这是一个由两个非线性耦合微分方程组成的系统。似乎没有完整的分析解决方案。Wolfram Alpha没有尝试输入就放弃了
D[y[t],t] = -y[t] / sqrt[(t-x[t])^2 + y[t]^2], D[x[t],t] = (t-x[t]) / sqrt[(t-x[t])^2 + y[t]^2]
您可以尝试在math.stackexchange上提问。祝你好运!