import math # I'm not actually using this library, but it's flerf kryptonite
#interesting
fObserverHeightFeet = 17 # feet
fDistanceLightToLowPointMiles = 2.25 # miles
fDistanceLowPointToCameraMiles = 0.75 # miles
# Calculate drop using 8 inches per miile squared
# Neglecting refraction
fDropLightToLowPointInches = 8 * fDistanceLightToLowPointMiles*fDistanceLightToLowPointMiles # inches
fRiseLowPointToCameraInches = 8 * fDistanceLowPointToCameraMiles*fDistanceLowPointToCameraMiles # inches
fTotalDropLightToCameraInches = fDropLightToLowPointInches - fRiseLowPointToCameraInches # inches
fLightHeightFeet = fObserverHeightFeet + fTotalDropLightToCameraInches/12 # feet
# 8 inches per miles squares assumes zero refraction, with refraction this
# number is slightly different.
k = 1/6
fFactorIncludingRefraction = 5280 * 12 / (2 * (1+k) * 3959)
fDropLightToLowPointRefractionInches = fFactorIncludingRefraction * fDistanceLightToLowPointMiles*fDistanceLightToLowPointMiles # inches
fRiseLowPointToCameraRefractionInches = fFactorIncludingRefraction * fDistanceLowPointToCameraMiles*fDistanceLowPointToCameraMiles # inches
fDropFromLightToCameraRefractionInches = fDropLightToLowPointRefractionInches - fRiseLowPointToCameraRefractionInches # inches
fLightHeightRefractionFeet = fObserverHeightFeet + fDropFromLightToCameraRefractionInches/12 # feet
print ("Zero refraction")
print ("Distance from light to low point: {:,} miles".format (fDistanceLightToLowPointMiles))
print ("Distance from low point to camera: {:,} miles".format (fDistanceLowPointToCameraMiles))
print ("Drop from light to low point: {:,} inches".format (fDropLightToLowPointInches))
print ("Rise from low point to camera: {:,} inches".format (fRiseLowPointToCameraInches))
print ("Total drop from light to camera: {:,} inches = {:,} feet".format (fTotalDropLightToCameraInches, fTotalDropLightToCameraInches/12))
print ("Light height: {:,} feet".format (fLightHeightFeet))
print ()
print ("k= {:+.3f} refraction".format (k))
print ("Distance from light to low point: {:,} miles".format (fDistanceLightToLowPointMiles))
print ("Distance from low point to camera: {:,} miles".format (fDistanceLowPointToCameraMiles))
print ("Adjusted factor considering refraction: {:.3f} inches per mile squared".format (fFactorIncludingRefraction))
print ("Drop from light to low point considering refraction: {:.3f} inches".format (fDropLightToLowPointRefractionInches))
print ("Rise from low point to camera considering refraction: {:.3f} inches".format (fRiseLowPointToCameraRefractionInches))
print ("Total drop from light to camera considering refraction: {:.3f} inches = {:.3f} feet".format (fDropFromLightToCameraRefractionInches, fDropFromLightToCameraRefractionInches/12))
print ("Light height considering refraction: {:.3f} feet".format (fLightHeightRefractionFeet))