📐 गणितीय गाइड और प्रमाण

रैंडम भौगोलिक निर्देशांक कैसे काम करते हैं: गोलाकार सत्य

इंटरनेट पर अधिकांश निर्देशांक जनरेटर गणितीय रूप से क्यों गलत हैं और समान-क्षेत्र प्रक्षेपण वास्तविक समान बिंदु कैसे बनाता है।

📐 गणितीय सटीकता

समान-क्षेत्र गोलाकार वितरण बनाम ध्रुवीय पूर्वाग्रह दोष

अधिकांश मुफ़्त जनरेटर पृथ्वी को गोले के बजाय समतल आयत मानते हैं। हमारी गणितीय प्रणाली इसे कैसे ठीक करती है, यहाँ देखें।

❌ समतल रैंडम ग्रिड (प्रतियोगियों की त्रुटि)

त्रुटिपूर्ण
// ❌ Flat 2D Rectangular Bug:
const lat = (Math.random() * 180) - 90;
const lng = (Math.random() * 360) - 180;

समस्या: भूमध्य रेखा पर 1° पट्टी 40,075 किमी की है जबकि 80°N पर केवल 6,950 किमी की। समतल अक्षांश चयन ध्रुवीय क्षेत्रों को 400% अधिक दिखाता है।

✅ मार्सग्लिया समान-क्षेत्र (हमारा अल्गोरिदम)

प्रमाणित और सटीक
// ✅ Marsaglia Equal-Area Sphere Math:
const u = Math.random();
const lat = Math.asin(2 * u - 1) * (180 / Math.PI);
const lng = -180 + Math.random() * 360;

समाधान: अक्षांश के साइन sin(θ) का समान चयन cos(lat) क्षेत्रफल संकोचन की पूरी भरपाई करता है। प्रत्येक वर्ग किमी को समान अवसर मिलता है।

1. आयताकार समतल धारणा की मौलिक त्रुटि

2D मानचित्र पर पृथ्वी एक समतल आयत जैसी दिखती है जिसमें अक्षांश -90° से +90° और देशांतर -180° से +180° तक होता है।

कई कोडिंग ट्यूटोरियल इस तरह से रैंडम निर्देशांक बनाने की सलाह देते हैं:

// ❌ Naive algorithm (Suffers from polar bias bug)
const latitude = (Math.random() * 180) - 90;
const longitude = (Math.random() * 360) - 180;

यद्यपि यह कोड मान्य संख्याएं देता है, यह सभी अक्षांश पट्टियों को समान क्षेत्रफल वाला मानता है। वास्तविक 3D गोले पर अक्षांश की परिधि cos(अक्षांश) के अनुसार घटती है:

Circumference(θ) = 2πR · cos(θ)

भूमध्य रेखा (0°) पर परिधि 40,075 किमी है, जबकि 80° उत्तर पर यह केवल 6,950 किमी रह जाती है। समतल सूत्र ध्रुवों पर भूमध्य रेखा की तुलना में 5.7 गुना अधिक सघन बिंदु बनाता है!

2. मार्सग्लिया समान-क्षेत्र गोलाकार रूपांतरण

गोले की सतह पर समान रूप से वितरित बिंदु उत्पन्न करने के लिए प्रायिकता घनत्व क्षेत्रफल अवकलज के समानुपाती होना चाहिए:

dA = R² · cos(θ) dθ dφ = R² · d(sin θ) dφ

चूंकि क्षेत्रफल अवकलज d(sin θ) के समानुपाती है, हम [-1, 1] अंतराल में sin(θ) का समान चयन करते हैं:

// ✅ 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 };
}

यह सुरुचिपूर्ण गणितीय परिवर्तन सुनिश्चित करता है कि पृथ्वी पर प्रत्येक वर्ग किलोमीटर चुने जाने की समान संभावना रखता है।

3. भूमि अस्वीकृति सैंपलिंग और PRNG पुनरावृत्ति

पृथ्वी का लगभग 71% भाग महासागर है। जब उपयोगकर्ता केवल भूमि चुनता है, तो हम अस्वीकृति सैंपलिंग का उपयोग करते हैं:

  1. एक समान-क्षेत्र गोलाकार बिंदु बनाएं।
  2. महाद्वीपीय बहुभुज डेटा के विरुद्ध बिंदु का परीक्षण करें।
  3. यदि बिंदु महासागर में गिरता है, तो उसे अस्वीकार कर अधिकतम 250 प्रयासों तक पुनः उत्पन्न करें।

पुनरावृत्ति के लिए हमारा इंजन 53-बिट cyrb53 हैश और 32-बिट mulberry32 PRNG को जोड़ता है, जो 100% विश्वसनीय परिणाम सुनिश्चित करता है।