我试图开发一个游戏。
我有一个起点和起始向量(蓝色),之后我会在屏幕上绘制路径(黑色),我希望它能够以一定的惯性,或限制角度和步长的方式来跟随,并产生一条红线。
你有什么关于如何编写这种算法的建议吗?
我有一个起点和起始向量(蓝色),之后我会在屏幕上绘制路径(黑色),我希望它能够以一定的惯性,或限制角度和步长的方式来跟随,并产生一条红线。
你有什么关于如何编写这种算法的建议吗?
dt = 0.1秒
,起始速度由蓝色向量给出为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)
是y[j]
中最靠近x0
点的索引,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
。您看,这个方案相当通用,所以您应该进行实验。另一个选择是像这样做...
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概述的方法类似,但在方法上有一些不同。