diff --git a/library/maps/whiteboard-projection.js b/library/maps/whiteboard-projection.js index 124b36c3c..98b59e85b 100644 --- a/library/maps/whiteboard-projection.js +++ b/library/maps/whiteboard-projection.js @@ -25,6 +25,22 @@ * of it is rendered. Those numbers are the CORRECTION doing its job, read in the wrong coordinate * system. Screen y is proportional to ln(tan(pi/4 + lat/2)), never to lat. * + * ★ AND THERE IS A SECOND, SUBTLER WAY TO GET THE SPACE WRONG: correcting the X axis. Web Mercator's + * screen x is proportional to LONGITUDE ALONE -- no cos(lat) term. That absence is not an oversight in + * the formula, it is the reason the projection is conformal and the reason circles stay circles. A + * reader who has just been told "it is a projection, not a scale" naturally reaches for the + * plate-carree correction x = lng * cos(lat), which the renderer never performs, and then measures the + * damage their own extra transform did. MEASURED here on a ring at extent 260: true Mercator gives + * 0.000% warp at every fraction, while inserting cos(lat) into x invents 12.4% at 0.17, 23.8% at 0.25, + * 39.8% at 0.35 and 56.5% at 0.45 -- a clean, plausible, monotonic table describing nothing. + * (Both wrong spaces produce a table that GROWS with the fraction, and their magnitudes differ by which + * wrong transform you picked, so the shape of the numbers cannot tell you which mistake you made. Only + * comparing against x = lng, y proportional to ln(tan(pi/4 + lat/2)) can.) + * This happened to a careful reader within an hour of the first correction, in the opposite direction: + * first a projection mistaken for a scale, then an over-correction applying a transform that is not + * there. If a measurement of this module ever reports a threshold, suspect the harness before the maths + * -- roundness here cannot degrade, because it is the exact inverse of what the renderer does. + * * ★ THE REAL CEILING IS LATITUDE, not roundness. The drawing's outermost point reaches |lat| 52 deg at * 0.17, 77 at 0.35, 83 at 0.45 and 89.7 at 0.95 — and Web Mercator is undefined at the poles, with the * engines clamping around 85. So the parameter's usable range is bounded by how close to the pole the