我正在尝试开发游戏。
我有一个起点和起点矢量(蓝色),接下来我在屏幕上画出我要遵循的路径(黑色),该路线要以一定的惯性或有限的角度进行,并且每转一圈都会产生一条红线。
您对如何编程这种算法有什么建议吗?
最佳答案
您可以创建一个差分方案,即模型速度和离散时间点上源点的坐标。假设您修复了一些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]))
...
您必须在此处调整dt
和K
。 dt
应该足够小,以使轨迹平滑。较大的K
使轨迹更接近精确定义的轨迹,较小的K
使轨迹更放松。
实际上,现在我想了一下,现在就编辑,我了解到对力函数f
的选择并不理想,因为重力会允许空速,即,如果初始速度为太大。因此,您应该构造另一个函数,可能只是沿着f(x) = K x
或f(x) = K x ^ alpha
的东西,其中alpha > 0
。您会看到,此方案相当笼统,因此您应该进行试验。
关于具有一定惯性的路径跟踪算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6886002/