# How Lighthouses Work 5, Exercise 2: a rotating lens and its characteristic import math def flash_interval(period_s, panels): return period_s / panels # 4 equally spaced bull's-eye panels, one turn in 20 s print("interval:", flash_interval(20, 4), "s, rate:", 60 / flash_interval(20, 4), "per minute") # Dwell time of a 1.25 degree beam at 20 s per turn print("dwell:", round(1.25 / 360 * 20, 3), "s") # Fl 5 s from 4 panels: period of one turn print("turn for Fl 5s from 4 panels:", 5 * 4, "s") # Fl(2) 10 s: panel pair spacing for flash starts 2 s apart at a 10 s turn spacing_deg = 2 / 10 * 360 print("pair spacing:", spacing_deg, "deg") # Beam width a flash of 1 s needs at 20 s per turn and at 5 s per turn for t in (20, 5): print("1 s flash at", t, "s per turn needs a beam", 1 / t * 360, "deg wide") # Speed of the beam over the sea at a ship 10 nm away (nominal range) speed_deg_s = 360 / 20 nm = 1852.0 v = math.radians(speed_deg_s) * 10 * nm print("beam sweep speed at 10 nm:", round(v), "m/s") # Output: # interval: 5.0 s, rate: 12.0 per minute # dwell: 0.069 s # turn for Fl 5s from 4 panels: 20 s # pair spacing: 72.0 deg # 1 s flash at 20 s per turn needs a beam 18.0 deg wide # 1 s flash at 5 s per turn needs a beam 72.0 deg wide # beam sweep speed at 10 nm: 5818 m/s # # A lens with 4 equally spaced panels turning once in 20 s gives a flash every 5 s (12 per minute), the # interval of Fl 5s. A 1.25 degree beam (the first-order figure from How Lighthouses Work 4) sweeps past an # observer in 0.069 s at that speed, so a 1 s flash needs a beam 18 degrees wide (72 degrees if the turn takes 5 s). # That is the general trade-off: a narrow beam gives a short flash, a wide beam is weaker. I could not find a source # for how real lights reconcile the two, so treat the 1 s figure as the stated characteristic and not as a measured # beam. For Fl(2) the two flash starts are 2 s apart in a 10 s turn, so the panel pair sits 72 degrees apart. The # sweep speed at 10 nm is 5,818 m/s, which shows why the beam passes in a moment. All values come from the model, # not from any real light.