📐 수학 가이드 및 증명

랜덤 지리 좌표의 작동 원리: 구면의 진실

인터넷의 대다수 좌표 생성기가 가진 기하학적 결함과 등면적 구면 투영법이 공정한 무작위 점을 만드는 원리를 설명합니다.

📐 수학적 엄밀성

등면적 구면 분포 vs. 극지방 밀집 버그

대다수 무료 도구는 지구를 평면 직사각형으로 취급합니다. 당사 알고리즘이 완벽한 정밀도를 보장하는 원리를 확인하세요.

❌ 단순 평면 난수 (타사 도구의 결함)

수학적 오류
// ❌ Flat 2D Rectangular Bug:
const lat = (Math.random() * 180) - 90;
const lng = (Math.random() * 360) - 180;

문제점: 적도의 1° 위도 띠는 40,075km인 반면 80°N에서는 6,950km에 불과합니다. 단순 위도 추출은 극지방을 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. 평면 직사각형 가정의 근본적 기하 결함

2차원 평면 지도(메르카토르 등)에서 지구는 위도 -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,075km이지만 북위 80°에서는 6,950km에 불과합니다. 단순 평면 난수는 극지방의 점 밀도를 적도보다 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 };
}

이 우아한 수학적 변환을 통해 지구상의 모든 1제곱킬로미터가 정확히 동일한 선택 확률을 갖게 됩니다.

3. 육지 기각 샘플링 및 PRNG 결정론적 재현성

지구 표면의 약 71%는 해양입니다. 육지 전용 모드에서는 효율적인 기각 샘플링을 적용합니다:

  1. 등면적 구면 좌표점 1개를 생성.
  2. 대륙 폴리곤 벡터 데이터와 고속 교차 판정.
  3. 해양에 위치할 경우 폐기하고 최대 250회까지 자동 재생성.

연구와 재현성을 위해 53비트 cyrb53 해시와 32비트 mulberry32 PRNG를 결합하여 동일 시드에서 100% 동일한 좌표 출력을 보장합니다.