I think I confused myself over a misplaced "from" in your first post. The basic question I'm trying to solve is: from where on the surface is a 60m high tower visible to [from] another tower that is 15m above a fixed point
Sorry about that. Anyway I think you are right: I think I'm resigned to adding the heights of the two towers at B and taking the resultant visibility map as an approximation only.
The reason it's only an approximation, I think, is that raising the viewing height stretches the vector (ray) between the viewpoint and any given pixel of the surface in the vertical direction (only). This means that a ray between B and some A may just clear an intervening hill when B is 60 and A is 15, but fail to clear it (be obscured by the hill) when B is 75 and A is 0. After the stretch, all hills will appear slightly higher than they really are, so visibility will be systematically underestimated.
[Edit: that's wrong, I think. I don't understand why the approximation is only an approximation after all (yet). For now skip a few pointless paragraphs to "Alternatively..."] Can this be corrected for? I think so if, as well as stretching the vector between B and every pixel in the vertical direction, we also stretch it in the horizontal (i.e. radial) direction by the same proportion. This would preserve the angle of incidence for every ray, thus ensuring the same visibility pattern, pixel for pixel. This would involve a custom resampling of the surface, spreading all pixels (except the centre) outwards from B by 75 / 60 * their current radius. That's not exactly trivial, but doable. It would also be necessary to shift the pixels back again after drawing visible areas, though this could be done by a look-up table. Alternatively though, how about using Global Mapper, which allows explicitly for tower height at both ends? If you don't have Global Mapper and want to see the difference from the approximation in Manifold, send me some data (privately if necessary) and I'll send you back the result.
|