I’ve been trying to solve this for ever but I don’t know how to solve systems of many linear equations in C#.
Basically, I have N waypoints, which are just Vector2 objects, V[0], V[1], V[2], …, V[N-1]
Then I define N quadratic functions for each index i = 0, 1, 2, …, N-1
f_i(t) = (a[i]*t*t + b[i]*t + c[i], x[i]*t*t + y[i]*t + z[i])
The derivatives are simply:
g_i(t) = (2*a[i]*t + b[i], 2*x[i]*t + y[i])
where a, b, c, x, y, z are arrays of N floats.
We want that
f_i(0) = V[i] // so c[i] = V[i].x and z[i] = V[i].y
f_i(1) = V[(i+1)%N] // i.e. f_i(1) = V[0] in the case i = N-1
g_i(1) = g_{(i+1)%N}(0) // i.e. g_i(1) = g_N(0) in the case i = N-1
This gives 3 constraints for each quadratic, which therefore uniquely defines the solution.
How can I solve a, b, x, y? (c and z are very easy to solve)?
I want this because I want my enemies to smoothly follow curves without ever “teleporting” (discontinuous) but also without ever needing to suddenly change their velocity (although I don’t care if they do change their acceleration discontinuously, that’s tolerable).
UPDATE.
Ok I took a different approach: I define a smooth (mathematically smooth) parametric curve using Sine and Cosine functions. This allows me to control the enemy motion beautifully! But it has two weaknesses: it’s very tricky to define a precise route, waypoints just don’t make sense, and it’s hard to control the speed of the enemy, because it can vary as it moves. I will give my script in the next lecture if anyone wants to look at it, copy it, or suggest improvements.