1. Dikdörtgen Harita Varsayımının Temel Geometrik Hatası
2B harita izdüşümünde (Mercator gibi), Dünya enlemi -90° ile +90°, boylamı -180° ile +180° olan düz bir dikdörtgen gibi görünür.
Birçok basit programlama rehberi koordinatları bu şekilde üretmeyi önerir:
// ❌ Naive algorithm (Suffers from polar bias bug) const latitude = (Math.random() * 180) - 90; const longitude = (Math.random() * 360) - 180;
Bu kod geçerli sayılar üretse de, tüm enlem bantlarının aynı fiziksel alana sahip olduğunu varsayar. Gerçek bir kürede enlem çemberi cos(enlem) oranında küçülür:
Ekvatorda (0°) çevre 40.075 km iken 80° Kuzeyde yalnızca 6.950 km’ye düşer. Düz algoritma kutuplarda ekvatora göre 5,7 kat daha yoğun nokta üretir!
2. Marsaglia Eşit Alanlı Küresel Sinüs Dönüşümü
Noktaların küre yüzeyine tamamen eşit dağılması için olasılık yoğunluğu diferansiyel alan öğesiyle doğrudan orantılı olmalıdır:
Alan öğesi d(sin θ) ile orantılı olduğundan, sin(θ) değerini [-1, 1] aralığında eşit olarak örnekleriz:
// ✅ 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 };
}Bu zarif matematiksel dönüşüm, Dünya üzerindeki her bir kilometrekarenin tamamen eşit seçilme şansına sahip olmasını garanti eder.
3. Karada Reddetme Örneklemesi ve PRNG Belirlenirciliği
Dünya yüzeyinin yaklaşık %71’i okyanuslarla kaplıdır. Yalnızca kara modu seçildiğinde reddetme örneklemesi uygularız:
- Eşit alanlı bir küresel nokta üret.
- Kıta poligonu sınır vektörleriyle anlık kesişim testi yap.
- Eğer nokta okyanusa düşerse reddet ve 250 denemeye kadar yeniden üret.
Yinelenebilirlik için motorumuz 53-bit cyrb53 karmasını 32-bit mulberry32 PRNG ile birleştirerek %100 belirlenimci sonuçlar sağlar.