구형의 지구 모델을 사용하면 적절한 정확도를 얻을 수 있으며 간단한 빠른 계산이 가능합니다.
모든 좌표를 지구 중심 (3D) 직교 좌표로 변환합니다. 예를 들어
(cos(lon)*cos(lat), sin(lon)*cos(lat), sin(lat))
할 것이다. (지구 반경이 한 단위 인 거리 측정을 사용하므로 편리합니다.)
시작점에 대해 X0 = (x0, y0, z0)을 작성하고 큰 점을 정의하는 대상 지점에 대해 X1 = (x1, y1, z1)을 작성합니다. U를 X0과 X1의 정규화 된 교차 곱이라고합시다. 이것은 두 단계로 계산됩니다.
V = (xv, yv, zv) = (y0*z1 - z0*y1, z0*x1 - x0*z1, x0*y1 - y0*x1)
V의 길이는
|V| = sqrt(xv^2 + yv^2 + zv^2)
정규화는 V를 단위 길이로 늘립니다.
U = (xu, yu, zu) = V / |V| = (xv/|V|, yv/|V|, zv/|V|).
점 X = (x, y, z)와이 큰 원의 평면 사이의 방향 3D 거리는 X와 Z의 내적입니다.
d = X * U = x*xu + y*yu + z*zu
지구 표면의 거리 측면에서 가장 가까운 점 은 평면에 가장 가까운 점이므로 d의 절대 값이 가장 작습니다 .
이 그림은 그 큰 원의 평면까지의 절대 3D 거리에 따라 색상이 지정되고 음영 처리 된 구의 두 개의 흰색 점과 2000 개의 임의의 점으로 결정된 큰 원 (검정색)을 보여줍니다. 즉, | d |.
가장 가까운 점을 찾은 후 먼저 큰 원의 평면 (3D)에 투영 한 다음 방사형 바깥쪽으로 지표면까지 연장하여 큰 원으로 투영합니다. 이 투영법은 단순히 d * U를 뺍니다.
X' = (x', y', z') = X - d*U = (x - d*xu, y - d*yu, z - d*zu).
방사상 투영은 V가 U로 다시 정규화되는 것과 같은 방식으로 X '를 단순히 정규화합니다.
X'' = X' / |X'|.
(가장 가까운 점이 큰 원의 극 중 하나 일 때 발생하는 | X '| = 0 인 경우 문제가됩니다. 발생할 수있는 경우이 조건에 대한 코드에 테스트를 포함하고 별도로 처리하십시오. d 의 부호를 사용하여 어떤 극을 식별하십시오.)
원하는 경우 일반적인 공식을 사용하여 X ''의 좌표를 (lat, lon)으로 다시 변환하십시오 .