J'essaie de comprendre comment dériver mathématiquement les points communs de deux cercles qui se croisent à la surface de la terre, étant donné un centre Lat / Lon et un rayon pour chaque point.
Par exemple, étant donné:
- Lat / Lon (37.673442, -90.234036) Rayon 107,5 NM
- Lat / Lon (36.109997, -90.953669) Rayon 145 NM
Je devrais trouver deux points d'intersection avec l'un d'eux étant (36,948, -088,158).
Il serait trivialement facile de résoudre ce problème sur un plan plat, mais je n'ai aucune expérience en résolution d'équations sur une sphère imparfaite telle que la surface de la Terre.
Réponses:
Ce n'est pas beaucoup plus difficile sur la sphère que dans l'avion, une fois que vous reconnaissez que
Les points en question sont les intersections mutuelles de trois sphères: une sphère centrée sous l'emplacement x1 (sur la surface de la terre) d'un rayon donné, une sphère centrée sous l'emplacement x2 (sur la surface de la terre) d'un rayon donné et la terre elle-même , qui est une sphère centrée sur O = (0,0,0) d'un rayon donné.
L'intersection de chacune des deux premières sphères avec la surface de la terre est un cercle qui définit deux plans. Les intersections mutuelles des trois sphères se situent donc à l'intersection de ces deux plans: une ligne .
Par conséquent, le problème se réduit à couper une ligne avec une sphère, ce qui est facile.
Voici les détails. Les entrées sont des points P1 = (lat1, lon1) et P2 = (lat2, lon2) à la surface de la terre, considérés comme une sphère, et deux rayons correspondants r1 et r2.
Convertissez (lat, lon) en (x, y, z) coordonnées géocentriques. Comme d'habitude, parce que nous pouvons choisir des unités de mesure dans lesquelles la terre a un rayon unitaire,
Dans l'exemple, P1 = (-90.234036 degrés, 37.673442 degrés) a des coordonnées géocentriques x1 = (-0.00323306, -0.7915, 0.61116) et P2 = (-90.953669 degrés, 36.109997 degrés) a des coordonnées géocentriques x2 = (-0.0134464, -0.807775 , 0,589337).
Convertissez les rayons r1 et r2 (mesurés le long de la sphère) en angles le long de la sphère. Par définition, un mille marin (NM) correspond à 1/60 degré d'arc (soit pi / 180 * 1/60 = 0,0002908888 radians). Par conséquent, en tant qu'angles,
Le cercle géodésique de rayon r1 autour de x1 est l'intersection de la surface terrestre avec une sphère euclidienne de rayon sin (r1) centrée en cos (r1) * x1.
Le plan déterminé par l'intersection de la sphère de rayon sin (r1) autour de cos (r1) * x1 et la surface de la terre est perpendiculaire à x1 et passe par le point cos (r1) x1, d'où son équation est x.x1 = cos (r1) (le "." représente le produit scalaire habituel ); de même pour l'autre avion. Il y aura un point unique x0 à l'intersection de ces deux plans qui est une combinaison linéaire de x1 et x2. En écrivant x0 = a x1 + b * x2 les deux équations planes sont
En utilisant le fait que x2.x1 = x1.x2, que j'écrirai comme q, la solution (si elle existe) est donnée par
Dans l'exemple en cours d'exécution, je calcule a = 0,973503 et b = 0,0260194.
Évidemment, nous avons besoin de q ^ 2! = 1. Cela signifie que x1 et x2 ne peuvent être ni le même point ni les points antipodaux.
Maintenant, tous les autres points sur la ligne d'intersection des deux plans diffèrent de x0 par un multiple d'un vecteur n qui est mutuellement perpendiculaire aux deux plans. Le produit croisé
le travail fourni n est-il non nul: encore une fois, cela signifie que x1 et x2 ne sont ni coïncidents ni diamétralement opposés. (Nous devons prendre soin de calculer le produit croisé avec une grande précision, car cela implique des soustractions avec beaucoup d'annulation lorsque x1 et x2 sont proches l'un de l'autre.) Dans l'exemple, n = (0,0272194, -0,00631254, -0,00803124) .
Par conséquent, nous recherchons jusqu'à deux points de la forme x0 + t * n qui se trouvent à la surface de la terre: c'est-à-dire que leur longueur est égale à 1. De manière équivalente, leur longueur au carré est 1:
Le terme avec x0.n disparaît car x0 (étant une combinaison linéaire de x1 et x2) est perpendiculaire à n. Les deux solutions sont facilement
et son négatif. Encore une fois, une haute précision est requise, car lorsque x1 et x2 sont proches, x0.x0 est très proche de 1, ce qui entraîne une perte de précision en virgule flottante. Dans l'exemple, t = 1,07509 ou t = -1,07509. Les deux points d'intersection sont donc égaux
Enfin, nous pouvons reconvertir ces solutions en (lat, lon) en convertissant les coordonnées géocentriques (x, y, z) en coordonnées géographiques:
Pour la longitude, utilisez l'arctangente généralisée qui renvoie des valeurs comprises entre -180 et 180 degrés (dans les applications informatiques, cette fonction prend à la fois x et y comme arguments plutôt que simplement le rapport y / x; elle est parfois appelée "ATan2").
J'obtiens les deux solutions (-88.151426, 36.989311) et (-92.390485, 38.238380), représentées sur la figure par des points jaunes.
Les axes affichent les coordonnées géocentriques (x, y, z). La tache grise est la partie de la surface de la terre de -95 à -87 degrés de longitude, 33 à 40 degrés de latitude (délimitée par un réticule d'un degré). La surface de la terre a été rendue partiellement transparente pour montrer les trois sphères. La justesse des solutions calculées est évidente par la position des points jaunes aux intersections des sphères.
la source
Le cas ellipsoïdal :
Ce problème est une généralisation de celui de la recherche de frontières maritimes définies comme des «lignes médianes» et il existe une littérature abondante sur ce sujet. Ma solution à ce problème consiste à tirer parti de la projection azimutale équidistante:
Cet algorithme converge quadratique et fournit une solution précise sur un ellipsoïde. (La précision est requise dans le cas des frontières maritimes, car elle détermine les droits de pêche, de pétrole et de minéraux.)
Les formules sont données dans la section 14 de Géodésiques sur un ellipsoïde de révolution . La projection azimutale équidistante ellipsoïdale est fournie par GeographicLib . Une version MATLAB est disponible dans les projections géodésiques pour un ellipsoïde .
la source
Voici un code R pour ce faire:
la source
À la suite de la réponse de @ whuber , voici du code Java qui est utile pour deux raisons:
Ce n'est pas optimisé ou complet (j'ai laissé de côté des classes évidentes comme
Point
), mais devrait faire l'affaire.Notez également l'utilisation de
atan2
- c'est l'inverse de ce que vous attendez de la réponse de @ whuber (je ne sais pas pourquoi, mais cela fonctionne):la source
Code 'R' de travail pour la réponse @wuhber.
la source
Si l'un des cercles est le Nortstar, il existe un moyen le plus simple avec la sphère unitaire.
Vous pouvez mesurer votre latitude avec Nortstar. Vous avez alors une position relative sur cette sphère. v1 (0, sin (la), cos (la)) Vous connaissez la position (angle) d'une autre étoile (star2), d'Almanach. v2 (sin (lo2) * cos (la2), sin (la2), cos (lo2) * cos (la2)) Ses vecteurs. De l'équation de la sphère.
lo2 est la longitude relative. C'est inconnu .
L'angle entre vous et star2, vous pouvez aussi le mesurer, (m) Et vous savez, le produit interne de deux unités vectorielles est cos (angle) entre les deux. cos (m) = point (v1, v2) u peut maintenant calculer la longitude relative (lo2). lo2 = acos ((cos (m) -sin (la) * sin (la2)) / (cos (la) * cos (la2)))
Après tout, vous ajoutez la longitude réelle de star2 à lo2. (ou sous, dépend de son côté ouest de vous, ou à l'est.) lo2 est maintenant votre longitude.
Désolé pour mon anglais, je n'apprends jamais cette langue.
2 choses: Northstar signifie étoile polaire.
Un autre. Parce que l'angle mesuré à l'horizontale relativement, il faut toujours une correction de 90 angles. C'est également valable pour l'angle m.
ps: moyenne de l'angle réel: position de l'étoile - correction du temps.
la source