I'm simulating snowfall in a discrete-time physics engine, using this formula for the drag force on a snowflake: $F_d=CAv^2$ (where $A$ is the flake's cross-sectional area and $C$ is a catch-all constant). I need to calculate the drag impulse over a given $dt$, and that's where I'm stuck.

I've read this similar question, but it's been so long since I've dealt with differential equations that I can't follow the accepted answer well enough to adapt it for my purposes.

  • $\begingroup$ It isn't obvious what you're asking. A snowflake will reach terminal velocity very quickly, and the terminal velocity will be given by $mg = CAv^2$. If you're trying to calculate the constant $C$ from first principles I suspect that's a tough problem. $\endgroup$ Oct 17, 2013 at 12:36
  • $\begingroup$ I'm asking about how to calculate the impulse due to air resistance on an object with a given initial velocity, acted upon by a constant outside force (gravity), over a given period of time. $\endgroup$
    – phu
    Oct 17, 2013 at 12:47

1 Answer 1


If you model the acceleration of a particle for small changes in speed as

$$ a(v) = A_0 + A_1 v + A_2 v^2 $$

with appropriate constants (like $A_0$ with gravity and $A_2$ with drag) then you can calculate the position $\Delta x$ and velocity change $\Delta v$ from the current speed $v_1$ ( $v \rightarrow v_1 + \Delta v$) as

$$ \Delta t = \int_{v_1}^{v_1+\Delta v} \frac{1}{a(v)}\,{\rm d} v \\ \Delta x = \int_{v_1}^{v_1+\Delta v} \frac{v}{a(v)}\,{\rm d} v $$

The result is well defined, but quite complex. You can simplify things a bit for simulations by only considering 2nd order terms of $\Delta v$. Simplifications can be made then using the constant $a_1 = a(v_1) = A_0 + A_1 v_1 + A_2 v_2^2$

$$ \Delta t = \frac{v-v_1}{a_1} - \frac{(v-v_1)^2}{2 a_1^2} (A_1 + 2 A_2 v_1) \\ \Delta x = \frac{v^2-v_1^2}{2 a_1} - \frac{v_1 (v-v_1)^2}{2 a_1^2} (A_1 + 2 A_2 v_1) $$


Initial Conditions: $$a(v) = 10 - 1 v - \frac{1}{5} v^2 \\ v_1 = 3 \\ a_1 = 10 - 1 3 - \frac{9}{5} = \frac{26}{5} = 5.2 $$ Step $\Delta v = 0.5$, $v = v_1 + \Delta v = 3.5$ with exact solution $\Delta t = 0.10632$, $\Delta x = 0.3430$, and approximate solution

$$ \Delta t = \frac{5 (v-3)}{26} + \frac{55 (v-3)^3}{1352} = 0.10632 \\ \Delta x = \frac{5 (v^2-9)}{52} + \frac{165 (v-3)^3}{1352} = 0.3430 $$

so the simulation (for example) would move from $$ \begin{Bmatrix} t_1=10 \\ x_1=1 \\ v_1 = 3 \\ a_1 = 5.2 \end{Bmatrix} \rightarrow \begin{Bmatrix} t_2=10.1053 \\ x_2=1.3430 \\ v_2 = 3.5 \\ a_2 = 4.05 \end{Bmatrix}$$

Impulse Calculation

Now you can turn the solution around and state that

$$ \Delta v = \frac{A_0 + A_1 v_1 + A_2 v_1^2}{A_1 + 2 A_2 v_1} \left( 1 - \sqrt{ 1 - 2 (A_1 + 2 A_2 v_1) \Delta t} \right) $$

which is a change is velocity over some time step, with impulse $J = m \Delta v$.

  • $\begingroup$ I don't yet see how to calculate the impulse due to air resistance given the formulae you've written. Maybe it will help if I expand a bit on my situation: $\endgroup$
    – phu
    Oct 17, 2013 at 13:33
  • $\begingroup$ And impulse is a change in speed. If you turn the problem around and ask how much time will pass to change the speed a certain amount you then equations above. Now you can take the equations invert them for $\Delta x( t)$ and $\Delta v( t)$. $\endgroup$ Oct 17, 2013 at 13:37
  • $\begingroup$ Are you referring to the total change in velocity here? The physics engine I'm using handles gravity itself by default (though I could disable that if necessary). Thus I'd like to calculate the impulse due only to air resistance, if feasible. Sorry if that wasn't clear from my original question. $\endgroup$
    – phu
    Oct 17, 2013 at 13:44
  • $\begingroup$ I edited the post. You can remove the $A_0$ to disregard gravity. $\endgroup$ Oct 17, 2013 at 13:48
  • 1
    $\begingroup$ How would I find or calculate $A_1$ and $A_2$ given my initial equation, $F_d=CAv^2$? Just set $A_1=0, A_2=CA$? $\endgroup$
    – phu
    Oct 17, 2013 at 13:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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