我已经开始为游戏服务器开发单位轨迹,现在我正在尝试检索单位在给定时间的位置。当轨迹只是一条直线时很容易,但当一个单位追逐另一个单位时就复杂得多。
我已经完成了 flash app来说明问题。黑色轨迹用于单向行进的单位。蓝追黑,红追蓝。我想要的是预先计算蓝色和红色的整个轨迹,以便能够在恒定时间内检索它们的位置。
这可能吗?感谢您的帮助!!
最佳答案
这是一篇论文 A classic chase problem solved from a physics perspective Carl E. Mungan 解决了一个特定版本,其中追逐者最初垂直于被追逐物体的轨迹。我认为这是解决方案的一个无关紧要的元素,因为垂直度沿着轨迹的其余部分消失了。
它是一个自治微分方程组,因为时间没有明确出现在方程的系数或项中。这支持了这样的想法,即论文中给出的解族具有足够的通用性,可以提供非垂直初始条件。
该论文提供了更多链接和引用资料,以及一个有用的搜索词“追逐曲线”。
让我们陈述一个与 Mungan 的略有不同、稍微更一般的初始条件。假设被追逐的物体(“船”)最初位于原点,并以恒定速度 V 沿正 y 轴(x=0)向上移动。追逐物体(“鱼雷”)最初位于(x0,y0) ,虽然瞬时重新定向直接指向“船”,但也以恒定速度 v 行进。
x0 为零的特殊情况会导致线性追逐曲线,即迎头碰撞或尾随追逐,因为 y0 为正或负。否则,通过在 y 轴上的反射(reflect),我们可以不失一般性地假设 x0 > 0。因此 x 坐标的有理数将得到明确定义。
为了我们的直接目的,假设速度 V,v 不相等,因此比率 r = V/v 不为 1。以下是类似于 Mungan 方程的“鱼雷”曲线的封闭形式解 (1) ( 10):
(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 则使用 the alternative form 以避免抵消错误),这允许根据我们对 x0 和 r 的了解来确定 H:
H = x0/(B^(1/r)) (5)
知道 H 后,通过将初始点 (x0,y0) 代入 (x0,y0) 即可轻松确定 (1) 中的加法常数 C。
棘手的部分将是确定“鱼雷”轨迹上的哪个点对应于给定时间 t > 0。该问题的逆向求解相当简单。给定轨迹上的一点,使用导数公式(2)找到该点的切线,并从该线的 y 截距 b(即从当前“船”位置)推导出时间 t:
t = b/V (6)
因此,确定 (x(t),y(t)) 在给定时间 t > 0 时“鱼雷”所在的位置本质上是一个寻根练习。人们很容易将所需的 x(t) 括在对应于时间 t1 和 t2 的两个 x 坐标 x1 和 x2 之间,使得 t1 < t < t2。可以使用寻根方法来细化此区间,直到达到所需的精度。一旦细化了相当小的区间,牛顿法将提供快速收敛。我们可以在下一期中查看此类过程的详细信息!
关于math - 确定物体跟随者的轨迹 - 追踪曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7096979/