일단 당신이 그것을 인식하면 그것은 비행기보다 구체에서 그리 어렵지 않습니다.
결과적으로, 문제는 구와 선을 교차시키는 것으로 줄어들 기 때문에 쉽습니다.
자세한 내용은 다음과 같습니다. 입력은 지구 표면의 점 P1 = (lat1, lon1) 및 P2 = (lat2, lon2)이며 구로 간주되며 두 개의 해당 반지름 r1 및 r2입니다.
(lat, lon)을 (x, y, z) 지 중심 좌표로 변환합니다. 평소와 같이 지구의 반지름이 측정 단위를 선택할 수 있기 때문에
x = cos(lon) cos(lat)
y = sin(lon) cos(lat)
z = sin(lat).
예에서, P1 = (-90.234036 Degree, 37.673442 Degree)는 지리 중심 좌표 x1 = (-0.00323306, -0.7915, 0.61116)을 가지며 P2 = (-90.953669 Degree, 36.109997 Degree)는 지리 중심 좌표 x2 = (-0.0134464, -0.807775 0.589337).
반지름 r1 및 r2 (구를 따라 측정 됨)를 구를 따라 각도로 변환합니다. 정의에 따라 1 해리 (NM)는 1/60도 (pi / 180 * 1/60 = 0.0002908888 라디안)입니다. 따라서 각도로
r1 = 107.5 / 60 Degree = 0.0312705 radian
r2 = 145 / 60 Degree = 0.0421788 radian
x1 주위의 반지름 r1 의 측지 원은 cos (r1) * x1을 중심으로 하는 유클리드 반지름 sin (r1) 과 지구 표면의 교차점입니다 .
cos (r1) * x1 주위의 반경 sin (r1) 구의 교차점과 지구 표면의 교점에 의해 결정된 평면은 x1에 직각이고 점 cos (r1) x1을 통과 합니다. 방정식은 x.x1 = cos입니다. (r1) ( "."은 일반적인 내적을 나타냄 ); 다른 비행기도 마찬가지입니다. x1과 x2의 선형 조합 인 두 평면의 교차점에 고유 한 점 x0이 있습니다. x0 = a x1 + b * x2라고 쓰면 두 평면 방정식은
cos(r1) = x.x1 = (a*x1 + b*x2).x1 = a + b*(x2.x1)
cos(r2) = x.x2 = (a*x1 + b*x2).x2 = a*(x1.x2) + b
q로 쓸 x2.x1 = x1.x2라는 사실을 사용하여 솔루션이 존재한다면 해결책은 다음과 같습니다.
a = (cos(r1) - cos(r2)*q) / (1 - q^2),
b = (cos(r2) - cos(r1)*q) / (1 - q^2).
실행 예제에서 a = 0.973503 및 b = 0.0260194를 계산합니다.
분명히 우리는 q ^ 2! = 1이 필요합니다. 이것은 x1과 x2가 같은 지점도 아니고 대지 점도 될 수 없음을 의미합니다.
이제 두 평면의 교차 선에있는 다른 모든 점은 두 평면에 서로 수직 인 벡터 n의 배수에 의해 x0과 다릅니다. 크로스 프로덕트
n = x1~Cross~x2
n이 0이 아닌 경우 작업이 수행됩니까? 다시 한 번 x1과 x2가 일치하거나 정반대가 아닙니다. (x1과 x2가 서로 가까울 때 많은 취소가 포함 된 빼기를 포함하므로 교차 곱을 높은 정밀도로 계산해야합니다.)이 예에서 n = (0.0272194, -0.00631254, -0.00803124) .
따라서 우리는 지구 표면에있는 x0 + t * n 형식의 두 점, 즉 길이가 1과 같습니다. 마찬가지로, 제곱 길이는 1입니다.
1 = squared length = (x0 + t*n).(x0 + t*n) = x0.x0 + 2t*x0.n + t^2*n.n = x0.x0 + t^2*n.n
x0 (x1과 x2의 선형 조합 임)이 n에 직각이므로 x0.n을 가진 항은 사라집니다. 두 가지 솔루션은 쉽게
t = sqrt((1 - x0.x0)/n.n)
그리고 그 부정적인. x1과 x2가 가까울 때 x0.x0이 1에 매우 가깝기 때문에 부동 소수점 정밀도가 약간 손실 되기 때문에 다시 한 번 높은 정밀도가 요구됩니다 . 이 예에서 t = 1.07509 또는 t = -1.07509입니다. 따라서 두 교차점은 동일합니다
x0 + t*n = (0.0257661, -0.798332, 0.601666)
x0 - t*n = (-0.0327606, -0.784759, 0.618935)
마지막으로, 지구 중심 (x, y, z)을 지리적 좌표로 변환하여 이러한 솔루션을 (lat, lon)으로 다시 변환 할 수 있습니다.
lon = ArcTan(x,y)
lat = ArcTan(Sqrt[x^2+y^2], z)
경도를 들어, 범위가 -180 내지 180 정도의 값을 반환하는 일반화 된 아크 탄젠트를 사용하여 (계산 애플리케이션에서,이 기능은 얻어 모두 인수보다는 비율 Y / (X)로서, x 및 y가, 때때로 "ATAN2"라고 함).
그림에 노란색 점으로 표시된 두 가지 솔루션 (-88.151426, 36.989311) 및 (-92.390485, 38.238380)을 얻습니다.
축은 지오 중심 (x, y, z) 좌표를 표시합니다. 회색 패치는 지구 표면에서 경도 -95 ~ -87도, 위도 33 ~ 40 도의 부분입니다 (1도 계수 선으로 표시). 지구 표면은 세 구체를 모두 보여주기 위해 부분적으로 투명하게 만들어졌습니다. 계산 된 솔루션의 정확성은 노란색 점이 구의 교차점에 어떻게 위치하는지에 의해 분명합니다.