salut,
soit deux villes dont la position est identifiée par la longitude (long) et la latitude (lat)
étant données deux villes v1(long1, lat1) et v2(long2, lat2), comment je peux trouver la distance (en km) entre ces deux villes ?
salut,
soit deux villes dont la position est identifiée par la longitude (long) et la latitude (lat)
étant données deux villes v1(long1, lat1) et v2(long2, lat2), comment je peux trouver la distance (en km) entre ces deux villes ?
'...parfois l'informatique peut vous rendre fou...'
j'aurai tendance à le faire par étapes :
- la latitude d'abord : tu calcules la différence d'angle entre le point de départ et le point d'arrivée, puis tu calcules la longueur de l'arc correspondant à cet angle (on va supposer que la terre est ronde et fait 40 000 km de circonférence)
- la longitude ensuite :pareil que pour la latitude.
te reste plus qu'à faire un pytagore bête et méchant pour obtenir la distance à vol d'oiseau entre les deux
PS : ça ne restera qu'approximatin, selon la finesse de ton périmettre de base, et sachant que la terre n'est pas sphérique mais un patatoïde géant
Globalement inoffensif
Merci de respecter les règles du forum.
Aucune question technique par MP !
_______________________________________________________________________
Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
Tutoriaux HTML/CSS et PHP
En farfouillant sur le net, je suis tombé là-dessus :
http://mathforum.org/library/drmath/view/54680.html
http://mathforum.org/library/drmath/view/51711.html
il semblerait donc que ma solution soit un poil simpliste
Globalement inoffensif
Merci de respecter les règles du forum.
Aucune question technique par MP !
_______________________________________________________________________
Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
Tutoriaux HTML/CSS et PHP
C'est cadeau (à vérifier quand meme):
http://fr.wikipedia.org/wiki/Distance_du_grand_cercle
Si tu ne te plantes pas, comment veux tu pousser?
Bonjour,
un p'tit bout de code Delphi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 {!- GEO_DISTPP, GEO_DISTPPN, GEO_DISTPPR ---- these functions provide distance between two Points function GEO_DISTPPR(P1,P2:double):single; function GEO_DISTPPR(P1,P2:double):single; input P1,P2 <double> coordinates of points P1 and P2 are passed as double, but this "double" is built from 2 singles representing latitude and longitude in radians. result <smalint> distance in NM for DISTPP <single> distance in NM for DISTPPN <single> "distance" in radians for DISTPPR } function GEO_DISTPPR(P1,P2:double):single; {!} var XX,YY : extended ; _P1 : geo_llrec absolute P1 ; _P2 : geo_llrec absolute P2 ; begin // P1 and P2 are passed as double, but this "double" is built from 2 singles representing latitude and longitude in radians. if P1=P2 then result:=0 else begin try XX := cos(_P1.lat)*cos(_P2.lat)*cos(_P1.lon-_P2.lon) + sin(_P1.lat)*sin(_P2.lat) ; YY:=arccos(XX) ; if XX>0 then result:=YY else result:=YY+XPI ; if result>XPI then result:=result-XPI ; except showmessage('Internal error in GEO_DistPPR'); end; end; end ; (*GEO_DISTPPR*) {!} function GEO_DISTPPN(P1,P2:double):single ; {!} begin GEO_DISTPPN:=GEO_DISTPPR(P1,P2) * minparrad ; end ;
" Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson
Et au cas où la fonction arccos à partir de arctan :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 function ARCCOS(A:extended) : extended ; begin result:=arctan2(sqrt(1-(A*A)),A); end ;
" Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson
Sans perte de généralité on peut supposer que la sphère est de rayon 1 et qu'un des deux points, disons A, a pour latitude 0 et pour longitude 0.
la sphère est centrée sur le repère orthonormé O,i,j,k, le point A est l'extremité du vecteur i, le point B a des coordonnées polaires alpha beta.
Tout revient à mesurer la longueur du grand arc AB (on sait que ce sont les géodésiques de la sphère)
On calcule alors les coordonnées cartésiennes du vecteur OB (passage des polaires en cartésiennes), puis ensuite le produit vectoriel (OA, OB) dont le module est au signe près le sinus de l'angle des deux vecteurs qui sont unitaires.
La fonction Arcsin nous donne alors l'angle des deux vecteurs, et c'est aussi la mesure en radians de l'arc de grand cercle AB qui a pour rayon 1.
Ce qu'on trouve est plus important que ce qu'on cherche.
Maths de base pour les nuls (et les autres...)
merci pour tous
j'ai trouvé une fonction en Javascript que j'ai transformé en PHP :
http://www.developpez.net/forums/sho...d.php?t=272814
'...parfois l'informatique peut vous rendre fou...'
Pourquoi ne pas appliquer ceci:
?2pi*rayon/360*(a1+a2) - 2pi*rayon/360*a1
Ceci se limitant donc à une représentation en deux dimensions, à adapter!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager