[Physics] Distance travelled by an object slowed only by drag

dragforceshomework-and-exerciseskinematicsprojectile

Let's say I throw an object horizontally off a cliff with a fixed height, and I know the time it takes to fall. I wanted to know how far it travels, but it has an acceleration opposite the direction of initial velocity due to air resistance. Therefore, I integrated velocity with respect to time; in this case, velocity as a function of time was equal to v0 – at. Okay, what's acceleration (in this case)? I looked into air resistance, and it turns out it's dependent on area, some coefficient, air density, and… instantaneous velocity… As a high school student who's only done basic calculus, this confuses me. Do I have to learn, like, second-order differential equations before I can solve this, or am I missing something basic? Any help would be greatly appreciated, and sorry for asking something basic like this :(.

Best Answer

It's not a dumb question - and actually it is impossible to answer it analytically (for the case of quadratic drag with horizontal velocity and vertical acceleration).

Here are some basic things to help you think about this:

  • The drag force points the opposite direction of the velocity
  • because the drag force is proportional to the velocity squared, the horizontal velocity increases the vertical drag(!)
  • The equation may be daunting, until you realize that it's basically saying "the drag force is the force needed to move all the air my projectile cuts through"

The equation is

$$F = \frac12 \rho v^2 A C_D$$

If you have a (front facing) area of $A$, then every second you move through a column of air of volume $V = Av$ where $v$ is the velocity. The mass of this column is $m = \rho V = \rho A v$. If you move all that air at the speed of your projectile, it gets a momentum of $p = mv = \rho A v^2$. This starts to look a lot like your drag equation. We just need the factor $\frac12 C_D$ to account for the way that air really moves (it's not simply "moving the entire column of air at the speed of the projectile) and there you are.

To compute the trajectory you will need to use numerical integration. You calculate the initial drag from the initial velocity. This allows you to compute the instantaneous acceleration (don't forget gravity); let this acceleration act for a very short time, and compute the new (horizontal and vertical components of) velocity. From velocity calculate displacement. Repeat for the next time step.

Update

I decided to write a simple Python script that demonstrates the approach. When you run this with A=0 (effectively no drag) you can compare the result with the analytical solution - this shows the integration works correctly. When you add "realistic" drag, you can then compute the trajectory for any other configuration. As usual, my code comes without warranty ("not necessarily an example of good coding, not fully tested, no error checking, etc..."). Enjoy.

# example of numerical integration of projectile motion in 2D
import matplotlib.pyplot as plt
from math import sin, cos, atan2, pi, sqrt

# constants
rho = 1.22 # density of medium
g = 9.81   # acceleration of gravity

# projectile properties
A = 0.05  # cross sectional area
Cd = 0.5  # drag factor
m = 0.1   # mass

# initial velocity & angle (radians)
v = 10.      # m/s
theta = pi/4

# initial position, velocity, time
x = 0.
y = 5.    # height above target surface
vx = v * cos(theta)
vy = v * sin(theta)
vx_init = vx
t = 0.

# storage for the result
X = [x]
Y = [y]

# step size
dt = 0.01

def drag(v, theta):
    F =0.5*rho*v*v*A*Cd
    return (F*cos(theta), F*sin(theta))

while ((y>0) | (vy>0)):
    # instantaneous force:
    Fx, Fy = drag(v, theta)
    # acceleration:
    ax = -Fx/m
    ay = -Fy/m - g
    # position update:
    x = x + vx*dt + 0.5*ax*dt*dt
    y = y + vy*dt + 0.5*ay*dt*dt
    # update velocity components:
    vx = vx + ax*dt
    vy = vy + ay*dt
    # new angle and velocity:
    v = sqrt(vx*vx+vy*vy)
    theta = atan2(vy,vx)
    # store result for plotting:
    X.append(x)
    Y.append(y)
    t = t + dt

# adjust last point to Y=0 - we may have "overshot":
ft = Y[-2]/(Y[-2]-Y[-1]) # fractional time to last point
X[-1] = X[-2] + (X[-1]-X[-2])*ft
Y[-1] = 0.
t = t - (1-ft)*dt

print('Total flight time: %.3f sec\n'%t)
print('Total distance: %.2f m'%X[-1])
print('Initial horizontal velocity: %.2f m/s'%vx_init)
print('Final horizontal velocity: %.2f m/s'%vx)
plt.figure()
plt.plot(X,Y)
plt.title('projectile motion')
plt.xlabel('X position')
plt.ylabel('Y position')
plt.show()

And an example of the output of the above:

enter image description here