[Perl] Distância entre 2 pontos na superfície da terra

Postagem de conteúdo sobre programação perl
Post Reply
User avatar
51M0N
Admin
Admin
Posts: 875
Joined: Fri Jan 02, 2015 2:06 pm

[Perl] Distância entre 2 pontos na superfície da terra

Post by 51M0N » Thu Sep 01, 2016 4:30 pm

Uma questão bem interessante galera, se queremos calcular a distancia entre dois pontos sabendo a sua latitude e longitude em locais separados por vários quilômetros.Se assumirmos que a terra é uma esfera redonda com uma superfície plana, podemos usar equações de trigonometria para calcular a distância ao longo da superfície da Terra entre dois pontos quaisquer, como dizia o Jack, o Estripador "vamos por partes"

Image

- A fim de determinar a distância entre dois pontos-, podemos aplicar a lei dos cossenos,essa lei é uma generalização do teorema de pitágoras, essa lei e dada pela seguinte formula.

Code: Select all

cos c = cos a *cos b + sin a * sin b *cos C
Nesta relação, C é o ângulo entre as arestas a e b é o triangulo dado os três pontos em uma superfície esférica. Se colocamos o terceiro vértice do nosso triângulo no polo norte esférico a e b se ligam no terceiro vértice com isso podemos medir as latitude e longitude com ângulo C entre eles. Vamos então aplicar o cosseno inverso na lei dos cossenos para obter o comprimento da borda c, que é a distância. veja a formula :

Code: Select all

c = cos^-1( cos(90 - lat1) cos(90 - lat2) + sin(90 - lat1) sin(90 - lat2) cos(lon2 - lon1) )
Vamos usar as funções trigonométricas medindo em radianos, não em graus, vamos ao código em perl seguido com alguns graus em decimais para entenderem

Code: Select all

#!/usr/bin/perl
use Math::Trig;
$earth_radius = 6378.14;  # raio da terra 

# primeiro ponto
$lat1 = 38.898556;
$lon1 = -77.037852;
# segundo ponto 
$lat2 = 38.897147;
$lon2 = -77.043934;
# fórmula de Haversine
my $a = deg2rad(90 - $lat1); # 90 - latitude por conta do polo norte 
my $b = deg2rad(90 - $lat2);
my $c = deg2rad($lon2 - $lon1);
my $calc = acos(cos($a) * cos($b) + sin($a) * sin($b)* cos($c));
my $km = $earth_radius * $calc;
print "A distancia:", $km;
A biblioteca Math::Trig[1] define muitas funções trigonométricas no perl, muito útil para essas tarefas, espero que seja útil essa dica.


Referência
[1]http://perldoc.perl.org/5.8.8/Math/Trig.html
Image
"Você, eu, nem ninguém vai bater tão duro como a vida. Mas não se trata de bater duro. Se trata de quanto você aguenta apanhar e seguir em frente (...). É assim que se consegue vencer." by Rocky Balboa

User avatar
Kodo no Kami
Admin
Admin
Posts: 727
Joined: Fri Jan 02, 2015 1:56 pm
Contact:

Re: [Perl] Distância entre pontos na superfície da terra

Post by Kodo no Kami » Thu Sep 01, 2016 11:17 pm

show mano ainda explico como funciona o algoritimo @feliz@
Image

que desagradavel ~ mirai kuriyama

User avatar
51M0N
Admin
Admin
Posts: 875
Joined: Fri Jan 02, 2015 2:06 pm

Re: [Perl] Distância entre pontos na superfície da terra

Post by 51M0N » Fri Sep 02, 2016 9:22 am

Kodo no Kami wrote:show mano, ainda explico como funciona o algoritmo @feliz@
kkk.... aos poucos vamo melhorando nos algoritmos.
Image
"Você, eu, nem ninguém vai bater tão duro como a vida. Mas não se trata de bater duro. Se trata de quanto você aguenta apanhar e seguir em frente (...). É assim que se consegue vencer." by Rocky Balboa

User avatar
gjuniioor
Vip
Vip
Posts: 122
Joined: Wed Apr 29, 2015 5:29 pm

Re: [Perl] Distância entre 2 pontos na superfície da terra

Post by gjuniioor » Sat Sep 10, 2016 7:02 pm

Isso ai, jow!

Casos assim são interessantes para ver a prática e real utilização das coisas que estudamos para não parecer que é em vão.

Poderia ter citado, mas acredito que já ficou foi bem claro no post alguns dos usos disso.

\o/
"A ignorância não se dá apenas pela falta de conhecimento, mas também pelo desgosto em obtê-lo" - @gjuniioor

https://github.com/gjuniioor
https://gjuniioor.github.io

https://lampiaosec.github.io

Post Reply

Return to “Perl”