Exercise 3 solution (Python) import math def slope(interval_m, spacing_mm, scale): """Ground distance (m), gradient (%) and angle (degrees) between two contours.""" ground_m = spacing_mm / 1000 * scale # mm on paper -> m on the ground gradient = interval_m / ground_m * 100 # rise over run, as a percentage angle = math.degrees(math.atan(interval_m / ground_m)) return ground_m, gradient, angle for args in [(10, 4, 25000), (10, 2, 50000)]: d, g, a = slope(*args) print(f"{args}: {d:.0f} m, {g:.1f} %, {a:.1f} degrees") Output: (10, 4, 25000): 100 m, 10.0 %, 5.7 degrees (10, 2, 50000): 100 m, 10.0 %, 5.7 degrees Check by hand: 4 mm at 1:25,000 = 0.004 m x 25,000 = 100 m 2 mm at 1:50,000 = 0.002 m x 50,000 = 100 m 10 m up in 100 m = 10 percent; atan(0.1) = about 5.7 degrees Both cases are the same slope, because a finer scale needs a wider gap on paper to show the same ground distance.