Suppose we fire a cannonball straight up. We measure the duration of its flight and use that to estimate the height it reached. Does including air drag increase or decrease the estimated height, assuming the flight is purely vertical and ignoring Coriolis?
Answer
Assuming quadratic drag, we can use the equations given at this link to answer your question.
The key equations are expressed in terms of the terminal velocity $v_t$:
$$v_t = \sqrt{\frac{2mg}{C_D \rho A}}$$
and the characteristic time $\tau$:
$$\tau = \frac{v_t}{g}$$
Then the time to reach the peak height is
$$t_{peak} = \tau \tan^{-1}\frac{v_0}{v_t}$$
The peak height is
$$y_{peak}=-v_t \tau\log\cos\left[\tan^{-1}\frac{v_0}{v_t}\right]$$
And the time to impact is
$$t_{impact}=\tau\cosh\left(e^{\frac{y_{peak}}{v_t\tau}}\right)$$
As the drag increases, so does the apparent time taken (for a given launch velocity). I modeled this with a little Python program, varying the size of a 0.1 kg sphere from 1 mm (very little drag) to 20 cm (lots of drag). The initial velocity was 20 m/s in each case, and I calculated the time taken to land. From the time taken, I could compute the "apparent height reached" as a function of total time of flight ($h = \frac{gt^2}{8}$, and directly from the drag equation. The results were quite close:
This is seen more clearly from the ratio plot:
Code used to do these calculations (for playing with - not provided as "reference code"):
# terminal velocity calculations
import matplotlib.pyplot as plt
import math
import numpy as np
cd=0.5 # drag coeff
m = 0.1 # mass of projectile
g = 9.81 # gravity
rho = 1.22 # air density
v0 = 20.0 # initial velocity
timeTaken=[]
heightReached=[]
yCalc=[]
sizes = np.arange(0.001, 0.2, 0.001) # size from 1 mm to 20 cm
for r in sizes:
A = math.pi*r*r
vt = math.sqrt(2*m*g/(cd*rho*A))
tau = vt / g
tpeak = tau*math.atan(v0/vt)
ypeak = -vt * tau * math.log(math.cos(math.atan(v0/vt)))
timpact = tau*math.acosh(math.exp(ypeak/(vt*tau)))
print vt, tau, ypeak, tpeak, timpact
tTotal = tpeak+timpact
timeTaken.append(tTotal)
heightReached.append(ypeak)
yCalc.append(g*tTotal*tTotal/8.0)
plt.figure()
plt.plot(sizes, yCalc)
plt.plot(sizes, heightReached)
plt.legend(['from time', 'actual'])
plt.xlabel('projectile size (m)')
plt.ylabel('height (m)')
plt.show()
plt.figure()
plt.plot(sizes, [x/y for x,y in zip(yCalc, heightReached)])
plt.xlabel('projectile size (m)')
plt.ylabel('ratio timed/actual')
plt.title('Timing the projectile overestimates height')
plt.show()
I repeated the calculation with a smaller mass (1 gram) to increase the range of drag regimes; and I also compared the time to reach the peak height with the time to drop back down. The ratio plot starts to flatten off:
and the time to come down is always less than the time to go up (no surprise); what is surprising is that the mean gets one close to the "right" time for the height achieved:
No comments:
Post a Comment