To simulate a puck's movement, I use the following model (please restrain from discussing the model, it makes the simulation look the way I want it to) and would like to know how to calculate the total way the puck will move and how long it will take to do so.

My setup is: Per second, the puck looses 20% (=1-k) of its previous speed, so after a time t the speed will be v(t) = v(0) * k^t.

  • If I look now at time t(n), how far has to puck traveled?
  • How long will it travel until its speed falls below a defined v(min)?
  • How far will it go until its speed drops below v(min)?

I have tried all kinds of formulas I remember from my physics lessons but I'm really stuck :-(

  • $\begingroup$ Are you aware that the friction model you are using is incorrect? Solid friction is not by percentages, but every second the puck loses the same amount of speed. $\endgroup$ – Ron Maimon Dec 9 '11 at 5:55
  • $\begingroup$ Yeah, but it does not look good :-) The model of liquid friction just makes the simulation more playable. I tried with constant acceleration but liked the other one better. $\endgroup$ – Krumelur Dec 9 '11 at 9:26
  • $\begingroup$ @Krumelur--- when writing a game, you are free to invent the laws of physics for the universe. I find it disheartening that faced with this freedom, video game designers feel the need to reproduce the laws of our universe ever more precisely, when there are infinitely many pac-man universes to discover. If you are interested in something crazy--- you could make a quantum puck, where you simulate a wavefunction with certain measurements by the players, and you can only have an uncertain idea of where it is, and the wavefunction in the goal gives the probability of a goal in intervals. $\endgroup$ – Ron Maimon Dec 9 '11 at 9:48
  • $\begingroup$ Well, in my case the issue was: I invented the movement behavior of the puck and was able to simulate it. But then I was faced with the fact that for the AI I needed to predict, where the puck will land and that's when the trouble started. :-) $\endgroup$ – Krumelur Dec 9 '11 at 11:32

If I were you, I would use a different K, having units of 1/time. So I would first say velocity falls in a very simple way:

$$v(t) = v_0 exp(-Kt)$$

To see how much time $t_m$ it takes to reach a particular speed $v_m$, you can solve for it in the above equation

$$t_m = ln(v_0/v_m)/K$$

Integrate $v(t)$ to see how far the puck moves:

$$x(t) = (v_0/K)(1 - exp(-Kt))$$

To see how the far the puck moves before it stops, just plug in infinity for $t$. That gives you $(v_0/K)$.

To estimate $K$, just plot $x$ or $v$ against $t$. Draw a tangent to the curve at time 0. The time where it intersects the asymptote is $1/K$.

  • $\begingroup$ Isn't that exactly what I have? Velocity drops by factor per second? $\endgroup$ – Krumelur Dec 9 '11 at 9:28
  • $\begingroup$ @Krumelur: It is, and what user1631 has as well, except for the $K$ that you use. Here the $K$ has pure rate units. You can easily estimate it from half-life (the time it takes for the puck to get half-way) as $K = ln(2)/t_h$ or conversely $t_h = ln(2)/K$. In pharma we deal with this all the time. It's much simpler than the $k$ you have. $\endgroup$ – Mike Dunlavey Dec 9 '11 at 13:05
  • $\begingroup$ I get it. That's even simpler. Haven't thought of that at all. $\endgroup$ – Krumelur Dec 9 '11 at 20:07

$$v(t) = v(0)*k^t = v(0)*e^{t*\log{k}}$$ $$x(t) = \int{dt v(t)} = v(0)*(e^{t*\log{k}}-1)/\log{k}=v(0)*(k^t -1)/\log{k}$$ $$ T(v_{min}) = \log{(v_{min}/v(0))}/\log{k}$$

et cetera.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.