지구 표면에 선이 주어지면 어떻게 수직선을 그리나요?


9

지구 표면에 선이 주어지면 어떻게 수직선을 그리나요?

이것이 매우 간단한 질문이라면 사과드립니다. 나는 이것이 간단한 작업이라고 생각했지만, 반 직관적 인 것으로 입증되었습니다.

아래 그림에서 파란색 선으로 시작합니다 (링크 참조-아직 그림을 업로드 할 수 없습니다). 파란색 선의 그라디언트 (m)를 계산 한 다음 다른 선 (녹색)을 그라디언트 -1 / m으로 플로팅하여 수직선을 찾았습니다. Matlab에서 선을 플롯하면 ( 'plot'과 'axis equal'사용) 예상대로 수직으로 보입니다.

http://imgur.com/7qMkx

그러나 KML 도구 상자를 사용하여이 선을 Google 어스로 내 보내면 더 이상 수직으로 보이지 않습니다 (아래 링크 참조, 짧은 선은 이전 그림의 파란색 선).

http://imgur.com/ncJQ7

나는 이상한 일이 곡면에서 발생한다는 것을 이해하지만 선이 적어도 국부적으로 수직으로 보일 것이라고 생각했습니다. 나는 이것이 Google 어스의 투영과 관련이 있다고 생각합니다. 특히 그리드 셀의 측면 길이는 거의 비슷하지만 세로 가장자리의 길이는 1도이지만 위도 가장자리의 길이는 0.5입니다 정도.

요약하면 다음과 같습니다.

  • 곡선 표면에서 유효한 수직선을 찾는 방법은 무엇입니까? (즉, 그라디언트가 -1 / m 인 선을 그립니다)
  • Google 어스 이미지에서 수직선이 예상대로 보입니까, 아니면 이상한 일이 있습니까?

최신 정보:

더 많은 맥락을 제공하기 위해 : 비행기에서 가져온 레이더 데이터를보고 있습니다. 다색 영역은 관찰이 기록 된 '스웨트'입니다. 위의 설명에서 시작한 파란색 선은 스와 스와 평행입니다. 이것은 항공기의 비행선입니다 (비행기는 대략 남서 방향으로 움직였습니다). 레이더는 왼쪽의 비행선과 직교하는 방향으로 본다. 비행선에 수직 인 선을 그리려고합니다. 이것은 레이더가보고있는 방향이어야하며, 스와 스를 깔끔하게 절단해야합니다. 보시다시피, 그렇지 않습니다.

여기에 이미지 설명을 입력하십시오


2
실제로 구글은 각도를 정확하게 묘사하지만 Matlab 플롯은 그렇지 않습니다.
whuber

답변 주셔서 감사합니다 whuber. 그것은 내가 계산 한 선이 실제로 원본과 수직이 아님을 의미합니까? 아니면 Matlab에서 선을 보는 방식이 어떻게 든 잘못 되었습니까? Matlab에서 'axis equal'명령을 사용하여 선이 수직임을 확신하지만 이것이 지구의 곡률을 제대로 나타내지 않을 것으로 예상합니다.
Paul Keating

2
당신의 첫 해석은 맞습니다, 폴 직교 좌표 인 것처럼 (lon, lat)을 사용하면 방향이 너무 심하게 왜곡되어 대부분의 각도가 눈에 띄게 왜곡됩니다. 따라서 직교 공식 -1 / m을 사용하면 운이 좋은 방향 (또는 적도)을 제외하고는 직각에 가깝지 않습니다. 대체 방법을 제공하려면 원하는 "선"종류 (예 : 측지선 또는 마름모꼴 선), 플로팅 목적 및 소요 시간을 아는 것이 도움이됩니다. (짧은 길이를 사용하면 간단한 근사값을 사용할 수 있습니다.)
whuber

2
BTW, 우리 사이트의 등각 투영 에 대한 스레드를 읽으면 이러한 문제에 대해 많은 것을 배울 수 있습니다 .
whuber

정말 고마워, whuber 매우 흥미로운. 위의 문제 설명에서 더 많은 컨텍스트를 제공했습니다. 필요한 길이는 상대적으로 짧기 때문에 (위에 표시된 스와 스의 너비는 10 분의 1 도입니다) 유효한 근사치에 대한 제안은 크게 감사하겠습니다. 링크에 대해서도 감사드립니다-확인해 보겠습니다.
Paul Keating

답변:


10

우아한 원칙 은 간단한 답변을 제공합니다.

매끄러운 곡면의 모든 점은 충분히 큰 크기로 평평합니다.

즉, 좌표를 적절하게 변경 한 후 (보통 좌표 중 하나만 조정하면 됨) 피타고라스 정리와 같은 유클리드 기하학 공식을 사용하여 거리를 계산하고 직각을 찾는 음의 역 경사 공식을 사용할 수 있습니다.

구의 위도와 경도 좌표를 사용하여 (경도가 단수가되는 극점에서 멀어짐) 극점에 접근함에 따라 경도의 축소 길이를 반영하도록 동서 방향으로 크기를 조정하면됩니다. 지구의 구형 모델에서 위축의 코사인에 의해 수축이 발생합니다. 이것은 단지 플롯의 종횡비의 변화 일뿐입니다.

이것은 남북 위도의 수도를 넘지 않고 어느 극에도 접근하지 않는 지역에서 작동합니다.

따라서 해야 할 일은 다음 과 같습니다.

  1. 모든 경도에 전형적인 위도의 코사인을 곱하십시오.

  2. 수직선을 계산합니다.

  3. 좌표 조정을 취소합니다.

예를 들어, 비행기의 트랙이 (lon, lat) = (-78, 40)에서 (-79, 41)로 이동했다고 가정합니다. 40.5와 같이 40에서 41 사이의 일반적인 위도를 가질 수 있습니다.

1 단계 조정 된 좌표는 (-78 * cos (40.5), 40) = (-59.31167, 40) 및 (-79 * cos (40.5), 41) = (-60.07207, 41)입니다.

2 단계 질문은 음의 역 기울기 방법을 사용하여이 작업을 제안합니다. 맞습니다. 그러나 어떤 경우에는 (기울기가 무한한 경우) 실패합니다. 벡터 산술을 사용하는 것이 더 일반적이고 강력합니다. 계산 방법은 다음과 같습니다.

비행 경로의 방향 벡터는 시작에서 끝까지의 변위입니다.

v =  (-60.07207, 41) - (-59.31167, 40)
  =  (-0.7604, 1.0).

오른쪽으로 수직 인 방향이

w = (1.0, 0.7604).

피타고라스 정리에 따르면,이 벡터의 길이는 계수의 제곱의 합의 제곱근입니다.

|w| = sqrt(1^2 + 0.7604^2) = 1.256268

비행기 비행의 시작점에서이 벡터를 따라 0.2도 움직여 봅시다. 시작은 (-59.31167, 40)이고 변위는 0.2 / | w | 시간 승, 끝나는

(-59.31167, 40) + 0.2 / 1.256268 * (1.0, 0.7604) = (-59.15247  40.12106).

3 단계 조정을 취소하려면 1 단계에서 사용한 것과 동일한 코사인으로 결과 점의 첫 번째 좌표를 나눕니다.

(-59.15247/cos(40.5), 40.12106) = (-77.79064, 40.12106)

1 : 1 종횡비를 사용하여 이러한 점을 플롯하면 각도가 직각이 아닌 둔각으로 나타납니다. 그러나 종횡비를 1 : cos (40.5) (약 4 : 3)로 변경하면 각도가 올바르게 90 도로 나타납니다. Google의 메르카토르를 포함한 등각 투영을 사용하여 점을 플롯하면 각도도 정확합니다.


2
환상적입니다. 매우 감사합니다. 내가 잘못 가고있는 곳과 문제를 해결할 수있는 방법에 대한 명확한 설명입니다. 나는 수직선을 얻기 위해 Matlab의 '방위각'과 '비방'기능을 사용했지만이를 수행하는 방법에 대한 더 자세한 첫 번째 원칙 설명을 보는 것이 좋습니다. 많은 감사합니다.
Paul Keating
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.