math - 确定物体跟随者的轨迹 - 追踪曲线

标签 math spline

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

我已经完成了 flash app来说明问题。黑色轨迹用于单向行进的单位。蓝追黑,红追蓝。我想要的是预先计算蓝色和红色的整个轨迹,以便能够在恒定时间内检索它们的位置。

这可能吗?感谢您的帮助!!

enter image description here

最佳答案

这是一篇论文 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/

相关文章:

c# - 从通用平面获取轴对齐坐标

javascript - JS Math - 获取 Var Val 并四舍五入到最接近的第 100 位

math - tensorflow.js 使用 webgl 绘制心脏

r - 如何在ggplot中使用spline()?

用于 2D 外推样条函数的 Python Scipy?

python - 二阶导数的三次样条表示

python : overflow error long int too large to convert to float

math - 是否可以在 OneNote 2007 中添加自定义 "napkin math"运算符?

spline - Catmull-Rom 和 Hermite 样条如何关联?

c# - C# 中的 3D 样条插值(曲面插值)