# How Lighthouses Work 4, Exercise 2: flame size and beam width in a first-order lens # A 10 cd burner at the focus of a lens of 920 mm focal length, flame radius 5, 10 and 20 mm. import math NM = 1852.0 def transmissivity(visibility_nm): return 0.05 ** (1 / visibility_nm) def luminous_range_nm(intensity_cd, visibility_nm, threshold_lx=2e-7): t = transmissivity(visibility_nm) lo, hi = 0.01, 200.0 for _ in range(100): mid = (lo + hi) / 2 e = intensity_cd * t ** mid / (mid * NM) ** 2 if e > threshold_lx: lo = mid else: hi = mid return (lo + hi) / 2 def geographic_range_nm(light_m, eye_m): return 3.86 * (math.sqrt(light_m) + math.sqrt(eye_m)) / 1.852 # Exercise 2: flame size and beam width in a first-order lens FOCAL_M = 0.92 # first-order focal length from the Wikipedia table LUMENS = 10 * 4 * math.pi # assumed: one 10 cd burner CAPTURE = 0.85 for radius_mm in (5, 10, 20): half = math.atan(radius_mm / 1000 / FOCAL_M) omega = 2 * math.pi * (1 - math.cos(half)) cd = CAPTURE * LUMENS / omega print(radius_mm, "mm flame radius", round(math.degrees(2 * half), 2), "deg", round(cd), "cd", round(luminous_range_nm(cd, 10), 1), "nm") # flame radius that gives a 2 degree beam r = FOCAL_M * math.tan(math.radians(1.0)) print("Radius for a 2 degree beam:", round(r * 1000, 1), "mm") # the same flame in the hyper-radial lens (1330 mm) half = math.atan(0.01 / 1.330) cd = CAPTURE * LUMENS / (2 * math.pi * (1 - math.cos(half))) print("Hyper-radial, 10 mm flame:", round(cd), "cd", round(cd / (CAPTURE * LUMENS / (2 * math.pi * (1 - math.cos(math.atan(0.01 / FOCAL_M))))), 2), "x the first order") # Output: # 5 mm flame radius 0.62 deg 1151129 cd 26.1 nm # 10 mm flame radius 1.25 deg 287801 cd 22.4 nm # 20 mm flame radius 2.49 deg 71969 cd 19.0 nm # Radius for a 2 degree beam: 16.1 mm # Hyper-radial, 10 mm flame: 601451 cd 2.09 x the first order # # A bigger flame fills more of the lens and spreads the beam: the full beam width goes from 0.62 # degrees at 5 mm radius to 2.49 degrees at 20 mm, and the peak intensity falls from about 1.15 # million cd to about 72,000 cd (the same light in a wider beam), so the nominal range falls from # 26.1 to 19.0 nm. A 2 degree beam needs a flame radius of about 16.1 mm. The same 10 mm flame in # the hyper-radial lens (1330 mm) gives about 2.09 times the intensity of the first order. All # numbers come from the assumed model of a round lens and a 10 cd burner, not from a real light.