1. L’Erreur Fondamentale de l’Hypothèse Rectangulaire
Sur une carte 2D (comme la projection Mercator), la Terre apparaît comme un rectangle plat où la latitude s’étend de -90° à +90° et la longitude de -180° à +180°.
De nombreux guides conseillent de générer les coordonnées ainsi :
// ❌ Naive algorithm (Suffers from polar bias bug) const latitude = (Math.random() * 180) - 90; const longitude = (Math.random() * 360) - 180;
Bien que ces nombres soient valides, ce code traite toutes les bandes de latitude comme ayant la même superficie. Sur une vraie sphère, la circonférence décroît avec le cosinus de la latitude :
À l’équateur (0°), la circonférence est de 40 075 km. À 80° Nord, elle n’est plus que de 6 950 km. L’algorithme plat concentre 5,7 fois plus de points par km² aux pôles qu’à l’équateur !
2. La Transformation Sphérique Équi-Surface de Marsaglia
Pour générer des points uniformément répartis sur une sphère, la densité de probabilité doit être proportionnelle à l’élément de surface différentiel :
Comme l’élément de surface est proportionnel à d(sin θ), nous pouvons échantillonner sin(θ) uniformément sur [-1, 1] :
// ✅ Correct Archimedes-Lambert-Marsaglia equal-area algorithm:
function getRandomSpherePoint() {
const u = Math.random(); // Uniform in [0, 1)
const v = Math.random(); // Uniform in [0, 1)
// Invert the cumulative distribution function:
const sinLat = 2 * u - 1; // Uniform in [-1, 1]
const latRad = Math.asin(sinLat); // In radians
const lat = latRad * (180 / Math.PI); // In degrees [-90, +90]
const lng = -180 + v * 360; // In degrees [-180, +180]
return { lat, lng };
}Cette transformation élégante garantit que chaque kilomètre carré sur Terre a exactement la même probabilité d’être sélectionné.
3. Échantillonnage par Rejet Terrestre et Reproductibilité PRNG
Environ 71 % de la Terre est recouverte par les océans. Quand l’utilisateur demande uniquement la terre ferme, nous utilisons l’échantillonnage par rejet :
- Générer un point sphérique équi-surface.
- Vérifier la position contre les polygones vectoriels des continents.
- Si le point tombe en pleine mer, le rejeter et régénérer jusqu’à 250 tentatives.
Pour la reproductibilité, notre moteur combine un hachage cyrb53 53 bits et un PRNG mulberry32 32 bits, assurant des résultats 100% déterministes.