Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Kinematics of a particle with drag

  1. Feb 24, 2013 #1
    (this is all in context to a java 2d object and is not homework related)

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

    I have tried integrating:

    [itex]a = \frac{dv}{dt} = kv^{2}[/itex]

    [itex]\int^{v}_{u} v^{-2} dv = \int^{t}_{0} k dt[/itex]

    [itex]\frac{1}{u} -\frac{1}{v} = kt [/itex]

    [itex]v = \frac{1}{\frac{1}{u} - kt}[/itex]

    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:

    [itex]\int v^{-2} dv = \int k dt[/itex]

    [itex]-\frac{1}{v} = kt[/itex]

    [itex]v = \frac{dx}{dt} = -\frac{1}{kt}[/itex]

    [itex] \int^{x}_{x_{0}}1\:dx=\int^{t}_{0}-\frac{1}{kt}dt[/itex]

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

    But you can't [itex]ln|0|[/itex] :/
    So, without bounds:

    [itex]x=-\frac{1}{k}ln|t| + c[/itex]

    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);
            velo.add(temp);
            double dx = dv * delta * 2 / 3;
            temp = velo.copy();
            temp.scale(dx);
            loc.add(temp);
            // TODO add drag
        } 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. jcsd
  3. Feb 24, 2013 #2

    mfb

    User Avatar
    2016 Award

    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.
     
  4. Feb 24, 2013 #3
    I forgot [itex]u[/itex] was a constant :P ok so:

    [itex]\int^{x}_{x_{0}}1\;dx=\int^{t}_{0}\frac{1}{\frac{1}{u} - kt}dt[/itex]

    [itex]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|[/itex]

    so i'm guessing i do this separately for each component of the vector :)
    Thank you for pushing me xD
     
  5. Feb 24, 2013 #4

    mfb

    User Avatar
    2016 Award

    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.
     
  6. Feb 24, 2013 #5
    O .. i was pretty sure you could separate the [itex]i[/itex] and [itex]j[/itex] components.
    but a problem occurs when [itex]u[/itex] 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
  7. Feb 24, 2013 #6

    mfb

    User Avatar
    2016 Award

    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.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Kinematics of a particle with drag
  1. - Kinematics - (Replies: 1)

  2. Force of Drag (Replies: 3)

  3. Drag Coefficient (Replies: 3)

Loading...