跟随具有一定惯性的路径的算法

时间:2011-07-30 21:15:57

标签: algorithm path line

我正在尝试开发游戏。

image demonstrating concept

我有一个起点和起始矢量(蓝色),然后我在屏幕上绘制路径(黑色),我想跟随一定的惯性,或每个转弯的有限角度和步骤应该产生一条红线。

您对如何编程此类算法有任何提示吗?

2 个答案:

答案 0 :(得分:3)

您可以创建一个差分方案,即离散时刻的源点的模型速度和坐标。例如,假设您修复了一些dt = 0.1 sec,蓝色矢量的起始速度为v0。我们从x0开始。 说y[j]是黑色路径的点。

x1 = x0 + v1 * dtv1 = v0 + (y[k(x0)+1] - x0) * f(abs(y[k(x0)+1] - x_0))。凡
  k(x0)x0中最接近y[j]点的索引,
   f(x)是一个表征“力”的函数,将你的轨迹拉到定义的路径。它仅为非负x es定义。

此模型将您的轨迹拉到定义路径中的下一个点,使其最接近轨迹上当前建模位置。

f(x)的一个很好的例子可能是建模引力:f(x) = K/(x * x),其中K应通过实验调整,以给出自然的预期结果。

然后x2 = x1 + v2 * dt,其中v2 = v1 + (y[k(x1) + 1] - x1) * f(abs(y[k(x1) + 1] - x_1))等等:

x[n+1] = x[n] + v[n+1] * dt,其中v[n+1] = v[n] + (y[k(x[n]) + 1] - x[n]) * f(abs(y[k(x[n])+1] - x[n])) ...

您必须在此处调整dtKdt应足够小,以使轨迹平滑。较大的K使轨迹更接近于精确定义,较小的K使轨迹更加放松。

编辑现在实际上当我想到一点时,我明白强制函数f的选择并不好,因为引力允许空间速度,即你的轨迹的能力如果初始速度太大,则无限地飞离所需的那个。所以你应该构建另一个函数,可能只是f(x) = K xf(x) = K x ^ alphaalpha > 0。你看,这个方案很通用,所以你应该试验一下。

答案 1 :(得分:1)

另一种选择是做这样的事情......

  1. Compute the average value of k points in the target path
     to get (<x>,<y>).
  2, Compte the angle between the most recent point in the path
     and (<x>,<y>) and turn that way; if the angle is too big,
     turn as hard as possible.
  3. Recompute (<x>,<y>) for the next set of k elements by sliding
     the window by 1; repeat step 2.

这可能会产生相当合适的行为。我将通过一个例子,但这将是相当乏味的。请注意,这与unkulunkulu概述的方法类似,但在方法方面略有不同。