Exercise 2 solution (Python) import math def back(bearing): return (bearing + 180) % 360 def resect(a, bearing_a, b, bearing_b): ra = math.radians(back(bearing_a)) rb = math.radians(back(bearing_b)) da = (math.sin(ra), math.cos(ra)) db = (math.sin(rb), math.cos(rb)) det = da[0] * -db[1] + db[0] * da[1] rx, ry = b[0] - a[0], b[1] - a[1] t = (rx * -db[1] + db[0] * ry) / det return a[0] + t * da[0], a[1] + t * da[1] A = (2800, 2300) B = (2900, 900) for bearing_b in (124, 129): e, n = resect(A, 45, B, bearing_b) print(f"Bearing to B {bearing_b}: easting {round(e, -1):.0f}, northing {round(n, -1):.0f}") Output: Bearing to B 124: easting 2000, northing 1500 Bearing to B 129: easting 2070, northing 1570 How it works: each feature gives a line starting at the feature and running along the back bearing (the measured bearing plus 180). The position is where the two lines cross; the code solves for the distance t along the first line. A 5 degree error in one bearing moves the fix by about 100 m (70 m east and 70 m north here). The feature is about 1.1 km away, and each degree is roughly 19 m over that distance, so the error grows with distance. This is why you should choose close features, take careful bearings, and use a third feature as a check.