#!/usr/bin/python3
# ===================================================================
# Drop a rock from an airplane and hit a target
# ===================================================================
import user_interface as ui
from math import sqrt
import sys
grav = 32.0 # gravity - 32 ft/sec/sec
# -------------------------------------------------------------------
# ---- prompt the user to enter a number
# -------------------------------------------------------------------
def get_float(prompt):
while(True):
print()
s = ui.get_user_input(prompt)
if not s: # empty string
print()
sys.exit()
tf,n = ui.is_float(s)
if not tf:
print()
print(f'opps! bad data input ({s})')
return n
# -------------------------------------------------------------------
# ---- main
# -------------------------------------------------------------------
while(True):
ui.clear_screen()
# ---- get air speed and wind speed
airspeed = get_float('Enter air speed\n + right to left\n' +
' - left to right\nEnter speed (mph): ')
windspeed = get_float('Enter wind speed\n + right to left\n' +
' - left to right\nEnter speed (mph): ')
if abs(airspeed + windspeed) < 10.0:
print()
print(f'air speed ({airspeed}) must at least 10 mph\n' +
f'greater than wind speed ({windspeed}) ' +
'- start over')
ui.pause()
continue
# ---- get altitude
altitude = get_float('Enter altitude (feet): ')
if altitude <= 0.0:
print()
print(f'altitude (altitude) must positive - start over')
ui.pause()
continue
# ---- calculate
print()
print(f'Gravity (ft/sec/sec): {round(grav,2)}')
print(f'Air speed (mph): {round(airspeed,2)}')
print(f'Wind speed (mph): {round(windspeed,2)}')
print(f'Altitude (feet): {round(altitude,2)}')
droptime = sqrt(altitude/(0.5 * grav)) # sec
print(f'drop time (sec): {round(droptime,2)}')
groundspeed = abs(airspeed + windspeed)
feetpersec = (groundspeed * 5280) / (60 * 60) # fps
print(f'ground speed (mph): {round(groundspeed,2)}')
print(f' (fps): {round(feetpersec,2)}')
dropdistance = droptime * feetpersec # feet
print()
print(f'Drop the rock when {round(dropdistance,2)} feet from target')
ui.pause()