Kinematics of a particle with drag

1. Feb 24, 2013

chimpz

(this is all in context to a java 2d object and is not homework related)

I have an object with velocity $v$ and position $x$.
Its acceleration is directly proportional to velocity squared ie $a=k v^{2}$.
Given the objects initial velocity $u$ and its initial position $x_{0}$ how would i work out its velocity and position at time $t$?

I have tried integrating:

$a = \frac{dv}{dt} = kv^{2}$

$\int^{v}_{u} v^{-2} dv = \int^{t}_{0} k dt$

$\frac{1}{u} -\frac{1}{v} = kt$

$v = \frac{1}{\frac{1}{u} - kt}$

tbh I got a lot further while writing this post than I did trying to work it out before
trying to get the new position:

$\int v^{-2} dv = \int k dt$

$-\frac{1}{v} = kt$

$v = \frac{dx}{dt} = -\frac{1}{kt}$

$\int^{x}_{x_{0}}1\:dx=\int^{t}_{0}-\frac{1}{kt}dt$

$x-x_{0}=-\frac{1}{k}\left[\:ln|t|\:\right]^{t}_{0}$

But you can't $ln|0|$ :/
So, without bounds:

$x=-\frac{1}{k}ln|t| + c$

Now i'm stuck.

How would I update the location?

Also, how would I implement drag while the engines were on?

Part of my code:
Code (Text):
public void update(double delta) {
if (engines) {
double dv = Math.sqrt(2 * powerToWeight * delta);
Vector2f temp = dir.copy(); //dir is the direction of the engine's force
temp.scale(dv);
double dx = dv * delta * 2 / 3;
temp = velo.copy();
temp.scale(dx);
} else {
velo.i = (float) (1 / ( (1 / velo.i) - drag * delta ));
velo.j = (float) (1 / ( (1 / velo.j) - drag * delta ));
// TODO update location
}
}
Pleased with myself for using the itex tags for the first time :D

Edit: could this be considered a hw-type question?

Last edited: Feb 24, 2013
2. Feb 24, 2013

Staff: Mentor

You can integrate this to get the position, there is no need to derive v(t) again.

If you do it in time steps: $x += v \delta t$

Add this as acceleration, try to derive v(t) again. If that does not work, do it in time steps.

3. Feb 24, 2013

chimpz

I forgot $u$ was a constant :P ok so:

$\int^{x}_{x_{0}}1\;dx=\int^{t}_{0}\frac{1}{\frac{1}{u} - kt}dt$

$x-x_{0} = -\frac{1}{k}\;[\;ln|\frac{1}{u} - kt|\;]^{t}_{0} = -\frac{1}{k}(\;ln|\frac{1}{u} - kt|\; - \;ln|\frac{1}{u}|\;) = -\frac{1}{k}\;ln|1-ktu|$

so i'm guessing i do this separately for each component of the vector :)
Thank you for pushing me xD

4. Feb 24, 2013

Staff: Mentor

In general, you cannot separate those components, they are coupled. Without other sources of acceleration, the motion happens in one dimension only, so you can rotate that x in the appropriate direction.

5. Feb 24, 2013

chimpz

O .. i was pretty sure you could separate the $i$ and $j$ components.
but a problem occurs when $u$ is a large positive

here is part of my update method now when there are no other forces on the object:
Code (Text):
if (velo.i != 0) {
loc.i += (float) (Math.log(1 - dragConst * delta * velo.i) / dragConst);
velo.i = (float) (1 / ((1 / velo.i) - dragConst * delta));
}

if (velo.j != 0) {
loc.j += (float) (Math.log(1 - dragConst * delta * velo.j) / dragConst);
velo.j = (float) (1 / ((1 / velo.j) - dragConst * delta));
}

Last edited: Feb 24, 2013
6. Feb 24, 2013

Staff: Mentor

Wait... if you update it step by step, why do you use the general formula?
What about velo.i = velo.i - velo.i*sqrt(velo.i^2 + velo.j^2)*k?

I hope I got the angles right.