In reply to sleeplessjb:
Let's take this from first principles (for the benefit of anyone reading...).
We can use the map scale to find out how many millimetres are used to represent a given distance on the map.
Let's start with 1000m, or 1000000mm.
With a map scale of 1:Sk (where S is, for instance, 25, or 40, or 50), we divide the given distance by the scale factor:
Representation = distance/scale
= 1000000/S.1000
= 1000/S
So, for a map scale of 1:25k, 1km is represented by 1000/25 = 40mm
Which we know is correct.
More generally, then, for a given distance, d (metres), and a given map scale 1:Sk, the representation in millimetres is easily found by
r = d/S mm
So, the 15m contour spacing with a 1:40k scale would give
r= 15/40 = 0.375mm
Of course, that's the vertical distance, and we want the horizontal distance, so we need to use some simple trigonometry:
tan(angle) = vertical/horizontal, so
horizontal = vertical/tan(angle)
Your 15m contour spacing, at 30 degree slope, on a 1:40k map would thus be represented by a contour spacing of:
r = 15/40.tan(30) = 0.65mm
The thick (75m) contours would be five times this, or 3.25mm
As you say, for 45 degree slope, it would be 75/40.tan(45) = 1.875mm
tl;dr;
Contour spacing for a given angle is separation/scale.tan(angle)
I wrote a bit of PostScript code to plot little tools to measure slope using contour spacing (and print to transparency). It is fully configurable to whatever map scale and contour spacing you want...
If anyone would like a copy, send me an email address.