import math

def horizon_km(h_m):
    return 3.57 * math.sqrt(h_m)

def gsd_m(range_m, pitch_um=5.0, focal_mm=100.0):
    return (pitch_um*1e-6) * range_m / (focal_mm*1e-3)

def px_on_target(size_m, range_m, **kw):
    return size_m / gsd_m(range_m, **kw)

print("horizon @6m:", round(horizon_km(6), 1), "km")
for r in (2000, 5000, 8000):
    print(r, "m ->", round(gsd_m(r),2), "m/px,", round(px_on_target(10, r)), "px on 10m boat")
