Dada uma linha na superfície da Terra, como traçar uma linha perpendicular a ela?


9

Dada uma linha na superfície da Terra, como traçar uma linha perpendicular a ela?

Desculpas se esta é uma pergunta muito simples. Eu pensei que isso seria uma tarefa simples, mas está se mostrando contra-intuitiva.

Começo com a linha azul na figura abaixo (veja o link - ainda não consigo fazer upload de figuras). Encontrei uma linha perpendicular calculando o gradiente da linha azul (m) e depois plotando outra linha (verde) com gradiente -1 / m. Quando planto as linhas no Matlab (usando 'plot' e 'axis equal'), elas parecem perpendiculares, conforme o esperado.

http://imgur.com/7qMkx

No entanto, quando exporto essas linhas para o Google Earth (usando a Caixa de ferramentas KML), elas não parecem mais perpendiculares (veja o link abaixo; a linha mais curta é a linha azul da figura anterior).

http://imgur.com/ncJQ7

Entendo que coisas estranhas acontecem em superfícies curvas, mas achei que as linhas deveriam pelo menos parecer perpendiculares localmente. Eu suspeito que isso tenha algo a ver com a projeção no Google Earth - em particular, o fato de que as células da grade parecem ter comprimentos laterais aproximadamente semelhantes, mas a borda longitudinal tem comprimento = 1 grau, enquanto a borda latitudinal tem comprimento = 0,5 grau.

Então, em resumo:

  • meu método de encontrar uma linha perpendicular é válido em uma superfície curva? (ou seja, plotando uma linha com gradiente -1 / m)
  • na imagem do Google Earth, as linhas perpendiculares têm a aparência esperada ou algo estranho está acontecendo?

ATUALIZAR:

Para fornecer mais contexto: Estou analisando dados de radar retirados de um avião. A área multicolorida é a 'faixa', onde as observações foram registradas. A linha azul com a qual comecei na explicação acima é paralela à faixa: esta é a linha de voo da aeronave (o avião estava se movendo na direção aproximadamente sudoeste). O radar olha na direção ortogonal à linha de vôo, à esquerda. Estou tentando desenhar uma linha perpendicular à linha de vôo; essa deve ser a direção que o radar está olhando e deve cortar a faixa ordenadamente. Como você pode ver, este não é o caso.

insira a descrição da imagem aqui


2
Na verdade, o Google retrata o ângulo corretamente, enquanto o seu gráfico do Matlab não ...
whuber

Obrigado pela resposta, whuber. Isso significa que a linha que calculei não é, de fato, perpendicular à original? Ou significa que a maneira como vejo as linhas no Matlab está de alguma forma errada? Usei o comando 'axis equal' no Matlab para me convencer de que as linhas são perpendiculares, mas espero que isso não represente adequadamente a curvatura da terra.
Paul Keating

2
Sua primeira interpretação está correta, Paul. Usar (lon, lat) como se fossem coordenadas cartesianas distorce as direções com tanta gravidade que a maioria dos ângulos é visivelmente distorcida. Portanto, o uso da fórmula cartesiana -1 / m nem o aproximará do ângulo reto, exceto em algumas direções de sorte (ou no Equador). Para fornecer um método alternativo, ajudaria a saber que tipo de "linha" você deseja (linha geodésica ou rhumb, por exemplo), seu objetivo em plotá-lo e quanto tempo seria necessário. (Comprimentos curtos permitem o uso de aproximações simples.)
whuber

2
BTW, você pode aprender muito sobre esses problemas lendo alguns tópicos em nosso site sobre projeções conformes .
whuber

Muito obrigado, whuber. Muito interessante. Forneci mais contexto na descrição do problema acima. O comprimento que eu preciso é relativamente curto (a largura da faixa, mostrada acima, que é de alguns décimos de grau), de modo que qualquer sugestão sobre aproximações válidas seria muito apreciada. Obrigado também pelo link - eu vou dar uma olhada.
Paul Keating

Respostas:


10

Um princípio elegante fornece uma resposta simples:

Todos os pontos em uma superfície curva e lisa são planos em uma escala suficientemente grande.

Isso significa que, após a mudança afim de coordenadas (geralmente envolvendo apenas um redimensionamento de uma delas), podemos usar fórmulas da geometria euclidiana, como o Teorema de Pitágoras para calcular distâncias e a fórmula de inclinação recíproca negativa para encontrar perpendiculares.

Com as coordenadas de latitude e longitude na esfera (longe dos pólos, onde a longitude se torna singular), tudo o que precisamos fazer é redimensionar a direção leste-oeste para refletir o comprimento cada vez menor de um grau de longitude quando se aproxima dos pólos. Com um modelo esférico da terra, esse encolhimento é dado pelo cosseno da latitude. Isso é apenas uma mudança na proporção da trama, nada mais.

Isso funciona para regiões que se estendem não mais do que alguns graus de latitude norte-sul e não se aproximam de nenhum dos pólos.

Portanto, tudo que você precisa fazer é:

  1. Multiplique todas as longitudes pelo cosseno de uma latitude típica.

  2. Calcule a linha perpendicular.

  3. Desfazer o ajuste de coordenadas.

Por exemplo, suponha que a pista do avião a levasse de (lon, lat) = (-78, 40) a (-79, 41). Podemos tomar uma latitude típica para ficar entre 40 e 41, como 40,5.

Etapa 1 As coordenadas ajustadas são (-78 * cos (40,5), 40) = (-59,31167, 40) e (-79 * cos (40,5), 41) = (-60,07207, 41).

Etapa 2 A pergunta propõe fazer isso usando um método de declive recíproco negativo. Isso seria correto, mas falhará em alguns casos (onde a inclinação é infinita). É mais geral e mais poderoso usar aritmética vetorial. Veja como é o cálculo.

O vetor de direção para a trajetória do voo é o deslocamento do início ao fim,

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

Girar qualquer vetor (x, y) em ângulos retos no sentido horário produz (y, -x), de onde uma direção perpendicular à direita é

w = (1.0, 0.7604).

De acordo com o Teorema de Pitágoras, o comprimento desse vetor é a raiz quadrada da soma dos quadrados de seus coeficientes,

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

Vamos mover, digamos, 0,2 graus ao longo deste vetor a partir do ponto de partida do voo do avião. O início é em (-59.31167, 40) e o deslocamento é de 0,2 / | w | vezes w, terminando em

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

Etapa 3 Para desfazer o ajuste, divida as primeiras coordenadas de qualquer ponto resultante pelo mesmo cosseno usado na Etapa 1:

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

Se você plotar esses pontos usando uma proporção de 1: 1, o ângulo parecerá obtuso, em vez de reto. Mas se você alterar a proporção para 1: cos (40,5) (cerca de 4: 3), o ângulo parecerá corretamente 90 graus. Quando você plota os pontos usando qualquer projeção conforme - incluindo o Mercator do Google -, o ângulo também estará correto.


2
Isso é fantástico, whuber. Muito obrigado. É uma explicação muito clara de onde estou errado e como posso resolver o problema. Acabei usando as funções 'azimute' e 'calcular' do Matlab para obter a linha perpendicular, mas é bom ver uma explicação mais detalhada dos primeiros princípios de como fazer isso. Muito Obrigado.
Paul Keating
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.