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 = (1-k) * 5280 * 12 / (2 * 3959)
fDropLightToLowPointRefractionInches = fFactorIncludingRefraction * fDistanceLightToLowPointMiles*fDistanceLightToLowPointMiles # inches
fRiseLowPointToCameraRefractionInches = fFactorIncludingRefraction * fDistanceLowPointToCameraMiles*fDistanceLowPointToCameraMiles # inches
fDropFromLightToCameraRefractionInches = fDropLightToLowPointRefractionInches - fRiseLowPointToCameraRefractionInches # inches
fLightHeightRefractionFeet = fObserverHeightFeet + fDropFromLightToCameraRefractionInches/12 # feet
print ()
print (" Globe prediction considering 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 considering zero refraction: {:,} feet".format (fLightHeightFeet))
print ()
print (" Globe prediction considering 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: {:.2f} inches per mile squared".format (fFactorIncludingRefraction))
print (" Drop from light to low point considering refraction: {:.2f} inches".format (fDropLightToLowPointRefractionInches))
print (" Rise from low point to camera considering refraction: {:.2f} inches".format (fRiseLowPointToCameraRefractionInches))
print (" Total drop from light to camera considering refraction: {:.2f} inches = {:.2f} feet".format (fDropFromLightToCameraRefractionInches, fDropFromLightToCameraRefractionInches/12))
print (" Light height considering refraction: k={:+.3f} refraction: {:.2f} feet".format (k, fLightHeightRefractionFeet))