Calculate initial velocity to move a set distance with inertia

前端 未结 3 1942
再見小時候
再見小時候 2021-01-01 03:24

I want to move something a set distance. However in my system there is inertia/drag/negative accelaration. I\'m using a simple calculation like this for it:

         


        
相关标签:
3条回答
  • 2021-01-01 04:13

    Distance travelled is just the integral of velocity with respect to time. You need to integrate your expression with respect to time with limits [v, 0] and this will give you an expression for distance in terms of v (initial velocity).

    0 讨论(0)
  • 2021-01-01 04:26

    If you want to move a set distance, use the following:

    alt text

    0 讨论(0)
  • 2021-01-01 04:29

    This is a simple kinematics problem.

    At some time t, the velocity (v) of an object under constant acceleration is described by:

    v = v0 + at
    

    Where v0 is the initial velocity and a is the acceleration. In your case, the final velocity is zero (the object is stopped) so we can solve for t:

    t = -v0/a
    

    To find the total difference traveled, we take the integral of the velocity (the first equation) over time. I haven't done an integral in years, but I'm pretty sure this one works out to:

    d = v0t + 1/2 * at^2
    

    We can substitute in the equation for t we developed ealier:

    d = v0^2/a + 1/2 * v0^2 / a
    

    And the solve for v0:

    v0 = sqrt(-2ad)
    

    Or, in a more programming-language format:

    initialVelocity = sqrt( -2 * acceleration * distance );
    

    The acceleration in this case is negative (the object is slowing down), and I'm assuming that it's constant, otherwise this gets more complicated.

    If you want to use this inside a loop with a finite number of steps, you'll need to be a little careful. Each iteration of the loop represents a period of time. The object will move an amount equal to the average velocity times the length of time. A sample loop with the length of time of an iteration equal to 1 would look something like this:

    position = 0;
    currentVelocity = initialVelocity;
    while( currentVelocity > 0 )
    {
        averageVelocity = currentVelocity + (acceleration / 2);
        position = position + averageVelocity;
        currentVelocity += acceleration;
    }
    
    0 讨论(0)
提交回复
热议问题