Tuesday 22 December 2015

classical mechanics - How does the height reached by a projectile of given flight time depend on air resistance?



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:


enter image description here


This is seen more clearly from the ratio plot:


enter image description here


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:


enter image description here


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:


enter image description here


No comments:

Post a Comment

Understanding Stagnation point in pitot fluid

What is stagnation point in fluid mechanics. At the open end of the pitot tube the velocity of the fluid becomes zero.But that should result...