📐 الدليل الرياضي والإثبات

كيف تعمل الإحداثيات الجغرافية العشوائية: الحقيقة الكروية

لماذا تعد معظم مولدات الإحداثيات على الإنترنت معيبة رياضياً وكيف يولد الإسقاط الكروي متساوي المساحة نقاطاً منتظمة حقيقية.

📐 الدقة الرياضية

التوزيع الكروي متساوي المساحة مقابل خطأ الانحياز القطبي

تعامل معظم المولدات المجانية كوكب الأرض كمستطيل مسطح. إليك كيف تصحح خوارزميتنا هذا الخلل.

❌ الشبكة المسطحة الساذجة (خطأ المنافسين)

غير صحيح
// ❌ Flat 2D Rectangular Bug:
const lat = (Math.random() * 180) - 90;
const lng = (Math.random() * 360) - 180;

المشكلة: يمتد شريط 1° عند خط الاستواء لمسافة 40,075 كم بينما يمتد عند 80° شمالاً لـ 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. الخلل الأساسي في افتراض الخريطة المستطيلة

في إسقاط الخريطة ثنائية الأبعاد (مثل إسقاط مركاتور)، تظهر الأرض كمستطيل مسطح يمتد فيه خط العرض من -90° إلى +90° وخط الطول من -180° إلى +180°.

تنصح العديد من الدروس البرمجية البسيطة بتوليد الإحداثيات بهذه الطريقة:

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

ورغم أن هذا الكود ينتج أرقاماً صالحة، إلا أنه يفترض خطأً أن جميع أشرطة خطوط العرض متساوية المساحة. في الكرة الحقيقية، يتقلص محيط دائرة العرض كتابع لجيب تمام خط العرض:

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

عند خط الاستواء (0°)، يبلغ المحيط حوالي 40,075 كم. بينما عند 80° شمالاً يتقلص إلى 6,950 كم فقط. الخوارزمية المسطحة تجعل كثافة النقاط عند القطبين أكبر بـ 5.7 مرات مقارنة بخط الاستواء!

2. تحويل مارساغليا الكروي متساوي المساحة

لتوزيع النقاط بانتظام كامل على سطح الكرة، يجب أن تتناسب كثافة الاحتمال طردياً مع عنصر المساحة التفاضلي:

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

ولأن عنصر المساحة يتناسب مع d(sin θ)، نختار sin(θ) بانتظام تام في المجال [-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 };
}

يضمن هذا التحويل الرياضي الأنيق أن كل كيلومتر مربع على سطح الأرض يحظى بنفس فرصة الاختيار تماماً.

3. أسلوب استبعاد المحيطات وحتمية التكرار PRNG

تغطي المحيطات نحو 71% من مساحة الأرض. عند اختيار "اليابسة فقط"، نطبق خوارزمية الاستبعاد:

  1. توليد نقطة كروية متساوية المساحة.
  2. فحص النقطة هندسياً مقابل مضلعات اليابسة الموجهة.
  3. إذا وقعت في المحيط، يتم استبعادها وإعادة التوليد بحد أقصى 250 محاولة.

ولضمان إعادة إنتاج نفس النتائج، يدمج محركنا تجزئة cyrb53 بدقة 53-بت مع خوارزمية mulberry32، مما يضمن تطابق النتائج 100%.