2010-08-05 16 views
6

Ceci est similaire à this question, mais un peu le contraire.Géométrie: trouver le point à une distance spécifique entre deux points

J'ai deux points géographiques (latitude, longitude) A et B. Disons qu'ils sont en dehors de 40 miles nautiques. Je voudrais calculer les coordonnées du point à 10 milles marins du point A, sur la ligne entre A et B. Je suis sûr que c'est un calcul très basique, mais ça fait des ANNÉES depuis que je dois faire ce genre de mathématiques (d'autres types que j'utilise tous les jours), donc je suis coincé. Tout pointeur serait grandement apprécié. Mon code pour ce projet est en Python, mais les mathématiques ne sont pas spécifiques à la langue, donc je ne suis pas vraiment concerné par cela - je veux juste connaître la formule.

+0

Vraisemblablement par « ligne entre A et B » vous voulez dire la ligne sur la sphère, et non la ligne droite dans l'espace 3D (qui traverse la sphère)? Ce dernier est probablement plus facile à coder, et peut-être assez proche de vos objectifs? – ShreevatsaR

+0

Oui, la ligne sur la sphère est ce que je veux dire. La ligne droite est sûrement plus facile à calculer; Je ne suis pas tout à fait sûr si c'est assez proche ou pas (je ne sais pas combien de différence cela fera sur les distances relativement courtes avec lesquelles je travaille). – RustyAtMath

Répondre

7

Vous avez deux vecteurs de position avec (latitude, longitude). Parmi ceux-ci, vous pouvez calculer votre relèvement du point A au point B (si vous ne le connaissez pas déjà). Avec un relèvement et une distance, vous pouvez calculer votre nouvelle latitude et longitude.

Toutes les mathématiques que vous devez savoir est référencé ici: http://www.movable-type.co.uk/scripts/latlong.html. Je m'occupe de ce genre de choses si rarement que c'est bien que ce lien soit sauvegardé quelque part (lire: imprimé).

+0

Ceci est une ressource fantastique. Exactement ce dont j'avais besoin. Je vous remercie!!! – RustyAtMath

4

Ainsi, il est quelque chose comme:

x B (x2,y2) 
    \ 
    \ 
    \ 
    \ 
     x C (x3, y3) 
     \ 
     \ 
     \ 
      X A (x1,y1) 

La façon dont je ferais ceci est d'abord trouver l'angle de cette ligne:

angle_A_B = arctan((y2-y1)-(x2-x1)) 

puis étant donné la distance entre A et C est connue (permet de l'appeler distance_A_C):

sin(angle_A_B) = delta_x_A_C/distance_A_C 
delta_x_A_C = distance_A_C * sin(angle_A_B) 

donc:

x3 = x1+delta_x_A_C 

même pour la valeur de Y3:

delta_y_A_C = distance_A_C * cos(angle_A_B) 

donc:

y3 = y1+delta_y_A_C 

j'ai obtenu les signes mitigés si elle ne fonctionne pas changer le +--.

+0

Cela ne fonctionne pas sur une sphère, ce qui est la question ici. C'est trouver la "ligne droite", pas la ligne du grand cercle. – ShreevatsaR

+0

Ah, d'accord. Je n'ai pas réalisé que c'est littéralement pour la surface de la Terre. – slebetman

+0

Même si cette solution n'était pas 100% précise avec la question originale, elle m'a été très utile. [Implémentation JS de cet algorithme] (https://gist.github.com/1965850) – fguillen

0

je crois que le Haversine Formula pourrait être appliqué ici. Si cela pouvait aider, je l'ai implémenté en C#, Java et Javascript?