Math 确定目标跟随者的轨迹-追踪曲线

Math 确定目标跟随者的轨迹-追踪曲线,math,spline,Math,Spline,我已经开始为游戏服务器开发单位轨迹,现在我正在尝试在给定时间检索单位的位置。当弹道只是一条直线时很容易,但当一个单位追赶另一个单位时要复杂得多 我已经做了一些工作来说明这个问题。黑色轨迹是指在一个方向上移动的单位。蓝色追赶黑色,红色追赶蓝色。我想要的是预先计算蓝色和红色的整个轨迹,以便能够在恒定的时间内恢复它们的位置 可能吗?谢谢你的帮助 我可以为您设置问题,但不能解决它 黑色曲线以恒定速度v0直线移动 蓝色曲线以恒定速度v1沿黑色方向移动 为简单起见,请选择坐标,以便在时间t=0时,黑色曲线从

我已经开始为游戏服务器开发单位轨迹,现在我正在尝试在给定时间检索单位的位置。当弹道只是一条直线时很容易,但当一个单位追赶另一个单位时要复杂得多

我已经做了一些工作来说明这个问题。黑色轨迹是指在一个方向上移动的单位。蓝色追赶黑色,红色追赶蓝色。我想要的是预先计算蓝色和红色的整个轨迹,以便能够在恒定的时间内恢复它们的位置

可能吗?谢谢你的帮助


我可以为您设置问题,但不能解决它

黑色曲线以恒定速度v0直线移动

蓝色曲线以恒定速度v1沿黑色方向移动

为简单起见,请选择坐标,以便在时间t=0时,黑色曲线从(x=0,y=0)开始并沿x方向移动

因此,在时间t>=0时,黑色曲线的位置为(v0t,0)

问题陈述

目标是在给定初始位置(x(t=0),y(t=0))的情况下,找到时间t>=0的蓝色曲线的x,y。运动微分方程是

dx/dt=v1(v0t-x)/a(t)

dy/dt=v1(-y)/a(t)

式中,a(t)=sqrt((v0t-x)^2+(y^2))是时间t时蓝色和黑色之间的距离

这是一个由两个非线性耦合微分方程组组成的系统。似乎没有完整的分析解决方案。放弃而不尝试输入

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]
你可以试着问下去。祝你好运

卡尔·E·芒根(Carl E.Mungan)的一篇论文解决了一个特殊的版本,在这个版本中,追逐者最初垂直于被追逐物体的轨迹。我认为这是解决方案中一个不重要的元素,因为垂直性在轨迹的其余部分消失了

它是一个微分方程的自治系统,因为时间不会显式地出现在方程的系数或项中。这支持了本文给出的解族足够一般,可以提供非垂直初始条件的观点

这篇论文提供了更多的链接和参考资料,以及一个有用的搜索词“追踪曲线”


让我们陈述一个稍微不同的,比Mungan的更一般的初始条件。假设被追逐物体(“船”)最初位于原点,并以恒定速度V沿正y轴(x=0)向上移动。追逐物体(“鱼雷”)最初位于(x0,y0),虽然直接在“船”处进行瞬时重新定向,但也以一定的恒定速度V移动

x0为零的特殊情况会导致线性追踪曲线,即迎面碰撞或尾随追逐,因为y0为正或负。否则,通过y轴上的反射,可以假定x0>0,而不丧失一般性。因此,x坐标的有理幂将得到很好的定义

为了我们的直接目的,假设速度V,V是不相等的,因此比率r=V/V不是1。以下是与Mungan方程(10)类似的“鱼雷”曲线的封闭式解(1):

其中常数H,C可由初始条件确定

应用鱼雷最初向原点处的船舶位置移动的条件,我们取x in(1)的导数,并从两侧取消系数1/H:

                     r        -r
dy/dx = (1/2) [ (x/H)  - (x/H)   ]                   (2)
现在,将曲线在初始点(x0,y0)处的坡度dy/dx与其通过原点的直线的坡度dy/dx相等:

      r         -r
(x0/H)  - (x0/H)   = 2y0/x0 = K                      (3)
这等于正B=(x0/H)^r的二次方程:

即B=[K+sqrt(K^2+4)]/2(但使用if K<0以避免取消错误),这允许根据我们对x0和r的了解来确定H:

H = x0/(B^(1/r))                                     (5)
知道H使得通过替换(1)中的初始点(x0,y0)来确定相加常数C变得简单


棘手的部分是确定“鱼雷”轨道上的哪个点对应于给定时间t>0。这个问题的反问题解决得相当简单。给定轨迹上的一点,使用导数公式(2)找到该点处的切线,并从该直线的y截距b(即从当前“船舶”位置)推断时间t:


因此,确定(x(t),y(t))在给定时间t>0时“鱼雷”位于何处基本上是一项寻根练习。人们很容易将期望的x(t)括在对应于时间t1和t2的两个x坐标x1和x2之间,使得t1 这是最有可能的,但这取决于您如何确定每个时间点的轨迹变化。从那里它应该是可行的。谢谢你的回答!在每个时间点,追逐物体的速度矢量都面对着被追逐物体。你说的“预先计算”是什么意思?只需计算两条轨迹并记录下来,然后进行查找。老实说,我不知道:)它可能通过任何可以让我在恒定时间内检索位置的东西——算法参数、方程,任何东西。记录整个轨迹是不可能的,因为它会使用太多的内存来达到可接受的精度,而且对于服务器来说也太慢。你考虑过基于微分方程的方法吗?在您的示例中,设f(t)为时间t时黑色单位的位置,g(t)为蓝色单位的位置。黑色单位线性移动,因此f(t)很简单。对于g(t),你说“在每个时间点,追逐物体的速度向量都面对着被追逐的物体。”从数学上来说,g’(t)=F(F(t),g(t))。意思是c
B^2 - K*B - 1 = 0                                    (4)
H = x0/(B^(1/r))                                     (5)
t = b/V                                              (6)