我正在尝试开发游戏。

我有一个起点和起点矢量(蓝色),接下来我在屏幕上画出我要遵循的路径(黑色),该路线要以一定的惯性或有限的角度进行,并且每转一圈都会产生一条红线。

您对如何编程这种算法有什么建议吗?

最佳答案

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

x1 = x0 + v1 * dt,其中v1 = v0 + (y[k(x0)+1] - x0) * f(abs(y[k(x0)+1] - x_0))。在哪里
k(x0)x0中最靠近y[j]点的索引,
f(x)是一个函数,用于表征将您的轨迹拉到定义路径的“力”。它仅针对非负x定义。

该模型将您的轨迹拉到定义的路径中的下一个点,该点到最接近该轨迹上当前建模位置的点。
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 ^ alpha的东西,其中alpha > 0。您会看到,此方案相当笼统,因此您应该进行试验。

关于具有一定惯性的路径跟踪算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6886002/

10-12 06:27