Cálculo da distância entre pontos

Noções de direcionamento
Avatar do usuário
jefersonba
Quadro de Honra
Quadro de Honra
Mensagens: 2922
Registrado em: 15 Dez 2010, 14:57
Localização: RS

18 Mar 2011, 00:22

Demonstraremos alguns métodos para o cálculo da distância entre 2 pontos, dadas suas coordenadas.

1ª Forma

Triângulo Pitagórico

Imaginemos 2 pontos P=(x1,y1) e Q=(x2,y2), obtemos a distância entre P e Q, traçando as projeções destes pontos
sobre os eixos coordenados, obtendo um triângulo retângulo e usando o Teorema de Pitágoras.
Pitagoras1.png
Pitagoras1.png (682 Bytes) Exibido 32322 vezes
Assim, considerando 2 pontos de coordenadas (-22.902778, -43.206667) e (-23.548333, -46.636111)
Calculando-se a distância entre eles, tem-se:
Pitagoras2.png
Pitagoras2.png (2.14 KiB) Exibido 32321 vezes
Pitagoras3.png
Pitagoras3.png (2.75 KiB) Exibido 32321 vezes
A distância em graus resulta 3,4896744
O raio da terra tem aproximadamente 6371km.
Uma volta na terra tem 2 * pi * raio = 40030000m.
Podemos, através de uma regra de 3 simples, obter a conversão do ângulo encontrado para uma distância em metros:

Código: Selecionar todos

360º	    -  40030000m
3,4896744º  -  388032m
d = 388032m
-------------------------------------

2ª Forma
Lei dos Cossenos - Triângulo Esférico


Sabemos, contudo, que a superfície da terra não é plana, é elipsoidal. Podemos, para melhorar a precisão dos cálculos, considerá-la esférica, e utilizar trigonometria esférica.
A Longitude de um ponto no globo terrestre é a distância medida em graus desde o Meridiano de Greenwich, que é a referência de Zero graus - até o Meridiano que passa por esse ponto.
A Latidude de um ponto no globo terrestre é a distância medida em graus desde o Equador Terrestre, que é a referência de Zero Graus - até o círculo paralelo que passa por esse ponto.
TrianguloEsferico.gif
TrianguloEsferico.gif (1.21 KiB) Exibido 32321 vezes
Como vemos na figura, os pontos formam um triângulo esférico. Ao contrário da trigonometria plana, não é suficiente conhecer dois ângulos para resolver o triângulo esférico. É sempre necessário conhecer no mínimo três elementos: ou três ângulos, ou três lados, ou dois lados e um ângulo, ou um ângulo e dois lados.
Dentre as fórmulas principais para a solução dos triângulos esféricos temos a lei dos cossenos para os lados:

Código: Selecionar todos

cos a = cos b * cos c + sen b * sen c * cos A
cos b = cos a * cos c + sen a * sen c * cos B
cos c = cos a * cos b + sen a * sen b * cos C
Vamos então agora repetir o cálculo da distância através da lei dos cossenos para o triângulo esférico.
Cossenos.gif
Cossenos.gif (11.89 KiB) Exibido 32320 vezes
Observe que do ponto A localizado no extremo norte até a linha do equador há arcos de 90º.
O ângulo A, formado entre b e c é a diferença entre as longitudes dos pontos.

Código: Selecionar todos

arco b = 90 - (-22.902778) = 112.902778
arco c = 90 - (-23.548333) = 113.548333
A = -43.206667 - (-46.636111) = 3.429444

cos a = cos b * cos c + sen b * sen c * cos A
cos a = cos(112.902778)*cos(113.548333) + sen(113.548333)*sen(112.902778)*cos(-3.429444)
cos a = (-0,3891686 * -0,3995225) + (0,9167234 * 0,9211665 * 0,9982092)
cos a = 0,1554816 + 0,8429426 = 0,9984242
a = arc cos(0,9984242) = 3,2169568º
O raio da terra tem aproximadamente 6371km. Uma volta na terra tem 2 * pi * raio = 40030000m.
Podemos, através de uma regra de 3 simples, obter a conversão do ângulo encontrado para uma distância em metros:

Código: Selecionar todos

360º	      -  40030000m
3,2169568º    -  357708m
d = 357708m
------------------------------

3ª Forma
Fórmula de Haversine


A Fórmula de Haversine é equação utilizada em navegação, fornecendo distância entre 2 pontos de uma esfera, a partir de suas latitudes e longitudes. Quando aplicada à Terra, ela representa apenas uma aproximação, pois o nosso planeta não é uma esfera perfeita. O raio da Terra é variável: nos polos é da ordem de 6357km; enquanto que no equador 6378km. Nos cálculos utilizados estamos considerando um valor de raio médio geralmente aceito, 6371km. A imprecisão dos cálculos aumenta conforme nos afastamos da linha do equador.
Se for desejada uma precisão ainda maior do que a obtida com Haversine, aconselha-se a utilização da Fórmula de Vincenty, que leva em consideração o achatamento da Terra nos polos, a sua carterística elíptica.
A fórmula utiliza a função seno verso - versine(). O seno verso de um ângulo A, tem a seguinte relação:
versin(A) = 1 - cos(A). Haversine significa a metade do seno verso (half versine).
Assim, há a relação: (1-cos(A))/2 = sen(A/2) * sen (A/2)
Haversine:

Código: Selecionar todos

Raio_da_terra = 6371; // km
dLat = (lat2-lat1) //diferença das latitudes dos pontos em radianos
dLon = (lon2-lon1) //diferença das longitudes dos pontos em radianos
a = sen(dLat/2) * sen(dLat/2) + cos(lat1) * cos(lat2) * sen(dLon/2) * sen(dLon/2)
c = 2 * atan2(sqrt(a), sqrt(1-a)); 
distancia = Raio_da_terra * c;
O valor a é o quadrado da metade do arco entre os pontos.
O valor c é a distância em ângulos radianos encontrada.

Então voltemos a calcular, agora com a fórmula haversine, a distância entre os pontos (-22.902778, -43.206667) e (-23.548333, -46.636111). Os ângulos são em radianos.

Código: Selecionar todos

lat1 = -22.902778 * 3.1415927 / 180 = -0.3997289
long1 = -43.206667 * 3.1415927 / 180 = -0.7540986
lat2 = -23.548333 * 3.1415927 / 180 = -0.4109959
long2 = -46.636111 * 3.1415927 / 180 = -0.81395369
dLat = -0.0112671
dLon = -0.0598551
a = sen(-0.00563353)*sen(-0.00563353) + cos(-0.3997289)*cos(-0.4109959)*sen(-0.02992754) = 0.0007878533
c = 0.056144822
d = 6731 * 0.056144822 * 1000 = 357699m

----------------------------------
4ª Forma
Google Earth


Utilizando-se da ferramenta régua, medimos a distância entre as coordenadas no mapa.
Desconhecemos o algoritmo e o raio da Terra que o Google utiliza para os cálculos.
GoogleEarth.png
GoogleEarth.png (485.36 KiB) Exibido 32316 vezes
d = 357781m

----------------------------------
Conclusão

Como observamos, há pouca diferença de resultado entre a 2ª e 3ª forma de cálculo.
A 2ª forma contudo, é pouco indicada para distâncias curtas.
A 4ª forma pode tornar-se imprecisa, já que a marcação da reta é sujeita a erro.

1ª forma - pitágoras - d = 388032m
2ª forma - cossenos - d = 357708m
3ª forma - haversine - d = 357699m
4ª forma - google - d = 357781m

Fontes:
http://astro.if.ufrgs.br/trigesf/trigesf.htm
http://educacao.uol.com.br/matematica/ult1705u43.jhtm
http://mathforum.org/library/drmath/view/51879.html
http://www.movable-type.co.uk/scripts/latlong.html
http://www.brasilescola.com/matematica/ ... etrico.htm
http://caraipora.tripod.com/calc_dist_e ... pontos.htm
http://blog.shander.eng.br/2011/03/calc ... errestres/
MRassin.jpg
MRassin.jpg (9.54 KiB) Exibido 29398 vezes
Avatar do usuário
escadajr
Quadro de Honra
Quadro de Honra
Mensagens: 3518
Registrado em: 28 Ago 2010, 12:17
Localização: SP

18 Mar 2011, 16:04

Tem um "jeitinho" simples para calcular a distância aproximada de 2 pontos a partir de suas coordenadas lat,long. Pegue a primeira fórmula da mensagem anterior (a pitagoras2.png), use os valores de latitude e longitude no lugar de x e y e multiplique o resultado por 110 (o número do logotipo do Maparadar). Pronto, distância em quilómetros. Para metros, multiplique por 1000.

Numa calculadora científica que tenha x² (x ao quadrado) e √ (raiz quadrada), a sequência de digitação seria:

MC (limpa a memória)
lat1 - lat2 = x² M+ (acumula para a memória)
long1 - long2 = x² M+
MR √ (raiz quadrada) x 110 =
Avatar do usuário
jefersonba
Quadro de Honra
Quadro de Honra
Mensagens: 2922
Registrado em: 15 Dez 2010, 14:57
Localização: RS

18 Mar 2011, 20:39

:idea: Este número mágico 110 vem da relação (2 * pi * raio da terra) / 360 :?:
2 * 3,141592654 * 6371 / 360 :arrow: 111
Pelo menos é uma aproximação disso e é semelhante à regra de 3 aplicada nos cálculos.
...::: JefersonBA :::...
Avatar do usuário
escadajr
Quadro de Honra
Quadro de Honra
Mensagens: 3518
Registrado em: 28 Ago 2010, 12:17
Localização: SP

18 Mar 2011, 21:07

Isso mesmo! É exatamente o resultado da sua regra de três! Arredondei para 110 para coincidir com o logo do Maparadar :mrgreen: O erro é de menos de 1%, então... ;)

Mas não precisava contar, assim acaba o mistério! :D :D :D
Rafaelamadeu
Novato
Novato
Mensagens: 1
Registrado em: 07 Mai 2012, 20:28

07 Mai 2012, 20:51

Boa noite pessoal desculpe reabrir o tópico, sou novato nesses assuntos de latitude longitude etc... vi isso no ensino médio e agora depois de alguns anos me deparei novamente com esses assunto na pós-graduação a distancia.

e estou com um exercício e estou com um pouco de dúvidas. é o seguinte tenho 6 municípios cada um com uma long. e lat.

Munic. longitude latitude
A -48.1844 -18.6586
B -46.5145 -18.5909
C -48.2791 -18.9186
D -47.9413 -19.7557
E -46.9333 -19.5953
F -46.9979 -18.9316

Tenho que encontrar o melhor município para instalação de um posto de saúde com base apenas na distancia em linha reta entre os pontos. ai manda fazer o seguinte, somar as latitudes e dividir pelo numero de pontos e o mesmo para longitude.

que daria:

Longitude - 47.4750
latitude - 19.0751

bom e depois pede para usar o teorema de Pitágoras para calcular a distancia entre cada município e o centro médio geográfico.

essa parte que ta pegando... isso é se a primeira parte está certa.

Não quero que achem que eu quero que façam meu dever :(, estou ai para aprender e um dia poder ajudar os que tem dúvidas.

Grande abraço..
Avatar do usuário
escadajr
Quadro de Honra
Quadro de Honra
Mensagens: 3518
Registrado em: 28 Ago 2010, 12:17
Localização: SP

11 Mai 2012, 12:33

Essa é boa, agora querem que a gente faça tarefa de escola... :D O que você foi arrumar, Jeferson?!!

Rafael, a média das latitudes e longitudes que você calculou é seu centro médio geográfico. Use isto junto com a fórmula Pitagoras2.png do Jeferson para calcular a distância para cada cidade. Substitua os X pela longitude e os Y pela latitude.

Cada resultado deve ser convertido para metros (ou quilômetros) usando a regra de 3 expilcada pelo Jeferson logo abaixo da fórmula 2. Se não souber usar regra de 3 (!!!) pode também multiplicar cada resultado por 111 para obter a distância em quilómetros.

Daqui pra frente, vamos cobrar para resolver tarefas escolares! Isso foi só uma amostra grátis! :lol: :lol: :lol:
Avatar do usuário
mreis
Quadro de Honra
Quadro de Honra
Mensagens: 3799
Registrado em: 13 Jan 2011, 01:52

11 Mai 2012, 16:03

Será que foi o mestre escadajr que passou este problema. :D
Avatar do usuário
escadajr
Quadro de Honra
Quadro de Honra
Mensagens: 3518
Registrado em: 28 Ago 2010, 12:17
Localização: SP

11 Mai 2012, 16:09

Não... os problemas que eu passo são bem mais cabeludos. :mrgreen:
Lachhubcorb
Novato
Novato
Mensagens: 2
Registrado em: 20 Ago 2012, 23:41
Localização: Israel
Contato:

22 Ago 2012, 02:37

+1. isto é muito interessante
Avatar do usuário
wlau
Aprendiz
Aprendiz
Mensagens: 64
Registrado em: 01 Out 2012, 20:26
Localização: BRASIL - SP - São Paulo
Localização: BRASIL - SP - São Paulo

07 Nov 2012, 16:04

Muito bom esse tutorial.

Com relação à 4ª forma, cabem as seguintes observações:

1) A ferramenta régua do Google Earth não traça retas e sim arcos sobre a superfície da Terra. Quando os pontos são próximos, parece reta. Para pontos distantes percebe-se que é um arco, como na figura abaixo, mostrando o cálculo da distância entre Buenos Aires e Lisboa, que resulta igual a 9573446 m.
Clipboard01.jpg
Clipboard01.jpg (29.79 KiB) Exibido 28605 vezes
2) A Ferramenta é bastante sofisticada, pois os arcos são traçados sobre uma Terra que não é esférica e sim um elipsóide achatado, o que é o padrão em cálculos geodésicos de precisão. Para verificar isso, calcula-se a distância entre dois pontos A e B, opostos entre si, em duas situações:

O ponto A está no polo norte. O ponto oposto B está no polo sul. A ferramenta régua fornece a distância de 20003918 m.

O ponto A está no equador (latitude 0 e longitude 0). O ponto oposto B também está no equador (latitude 0, longitude 180 graus). A ferramenta régua fornece a distância de 20037509 m

Ou seja, devido ao achatamento terrestre, a distância polo a polo, ao longo de um meridiano, é cerca de 34 km menor que a distância entre dois pontos opostos ao longo do equador.

Saudações a todos.
joaoBC
Aprendiz
Aprendiz
Mensagens: 64
Registrado em: 07 Out 2010, 19:09

06 Nov 2013, 00:23

Olá, Jefer !
Estava usando este post para calcular distância entre cidades, me deparei com um erro de digitação,
se possível, gostaria que fosse corrigido. É no método "3ª Forma - Fórmula de Haversine"
No Primeiro quadro de código, á penúltima linha diz:

Código: Selecionar todos

c = 2 * atan2(sqrt(a), sqrt(1-a))
Não entendi esta conta.
E, no exemplo há a conta:

Código: Selecionar todos

d = 6731 * 0.056144822 * 1000 = 357699m
Calculei, o valor deu 377910m

Obrigado,

João
Avatar do usuário
wlau
Aprendiz
Aprendiz
Mensagens: 64
Registrado em: 01 Out 2012, 20:26
Localização: BRASIL - SP - São Paulo
Localização: BRASIL - SP - São Paulo

07 Nov 2013, 11:37

Olá, joaoBC!

Posso dar um palpite?
Aparentemente o jefersonba errou na digitação do raio da Terra:

Código: Selecionar todos

d = 6731 * 0.056144822 * 1000 = 357699m
Não é 6731 km. O correto é 6371 km.

Quanto à fórmula

Código: Selecionar todos

c = 2 * atan2(sqrt(a), sqrt(1-a))
O valor a é o quadrado do seno da metade do arco entre os pontos. Desse modo, sqrt(a) é o seno da metade do arco entre os pontos e sqrt(1-a) é o cosseno da metade do arco entre os pontos. A função atan2 é o arco tangente.
Considerando a definição do Haversine, em vez de usar o arco tangente (atan2), pode-se também usar o arco seno (asin). O resultado é o mesmo.

Código: Selecionar todos

c = 2 * asin(sqrt(a))
Abraço.
joaoBC
Aprendiz
Aprendiz
Mensagens: 64
Registrado em: 07 Out 2010, 19:09

07 Nov 2013, 18:57

Olá, wlau, obrigado pela ajuda !!

Realmente eu não "reparei" na troca dos dígitos, de 6371 para 6731.
Se não se importar, preciso ainda de mais ajuda: o que não entendi
foi a fórmula do arco tangente de dois valores, no post, ao invés de
estar "atan(x)" está "atan(x,y)" ou, melhor dizendo,
[atan((sqrt(a), sqrt(1-a))]^2

Depois da sua dica, eu "pesquei" que o certo seria sqrt(a) / sqrt(1-a)
ou seja, o seno dividido pelo cosseno (assim, teremos a tangente) e a função arco dará o ângulo.
Viajei na maionese ou é isto mesmo ? Pois em algumas linguagens de programação, existe a função
arco tangente mas não a arco seno nem a arco cosseno... O erro foi a vírgula e não a divisão.
Também confundiu o fato de usar "atan2" ao invés de "atan", algo como "quadrado do
arco tangente" ou "arco tangente ao quadrado" ao invés de simplesmente "arco tangente"
como você explicou...
Fiz o cálculo, agora sim, bateu certinho. Era realmente uma divisão no arco tangente
"não ao quadrado" :mrgreen:
Responder

Voltar para “EXTRAIR DIREÇÂO - Direcionamento de Radar”