nessus a écrit:Bonjour à tous
je cherche à calculer les coordonnées lat et long résultants de l'intersection de 2 cercles l'un de centre (lat1,lon1) de rayon R1 et l'autre de centre (lat2;lon2) de rayon R2.
les cercles en question sont des Small et non des Great circles.
les distances sont en Nm
je voudrais m'inspirer des calculs fait ci dessus
http://gis.stackexchange.com/questions/48937/how-to-calculate-the-intersection-of-2-circlesmais il y'a des calculs intermédiaires que je ne pige pas
je dois mettre le tout dans un programme VBA pour EXCEL, ou en C
un autre site propose des solutions graphiques:
http://geo.javawa.nl/coordcalc/index_en.htmldonc si quelqu'un pourrait m'expliquer comment les obtenir
merci
Bonjour,
Donc pour résumer l'article, il faut suivre les étapes suivantes :
1) Convertir les latitudes/longitudes en coordonnées géométriques, pour trouver le centre des cercles.
On utilise alors la formule :
x = cos(lon) cos(lat)
y = sin(lon) cos(lat)
z = sin(lat).
Puisque est considéré le rayon de la Terre égal à 1.
(même si ce n'est pas le cas, il suffit toujours de prendre les rayons respectifs divisé par celui de la Terre... (diamètre théorique bien sûr)).
2) Tu convertis les miles nautiques en radian en multipliant par pi/180 * 1/60 (d'après la définition) et on note ça r.
3) On considère que les cercles sont respectivement les intersections de la Terre avec les sphères centrées en cos(r)*(x,y,z) de rayon sin (r).
C'est ça à mon avis qu'il faut bien saisir, il faut faire un dessin d'une coupe transversale de la Terre, dans le sens transversal aux disques.
(Il faut bien saisir qu'on ne peut pas utiliser le rayon de base car on n'est pas sur une surface plane). Malgré tout, ce résultat est facile à trouver car, grâce à la coupe, on se retrouve dans de la géométrie plane.
4) Maintenant, on doit connaître les plans qui contiennent les deux cercles.
Pour trouver une équation, il suffit de voir que le plan qui contient le cercle est orthogonal au vecteur (x,y,z) (point et vecteur ont ici les mêmes coordonnées, vu qu'on est sur une sphère) et qui passe bien sûr par le centre.
Du coup, en considérant qu'il existe un point unique X0 qui est une combinaison linéaire de X1 et X2 et en prenant a et b les coefficients associés (on rappelle que l'équation du plan s'obtient grâce à un vecteur normal... et que, ici, comme on choisit une combinaison linéaire de ces deux vecteurs CHOISIS, on a bien l'unicité (il y a sinon en effet une infinité de vecteurs normaux)), on obtient :
cos(r1) = X . X1 = (a*X1 + b*X2).x1 = a + b*(X2.X1) = a + b*(X1.X2)
cos(r2) = X . X2 = (a*X1 + b*X2).x2 = a*(X1.X2) + b
avec "." le produit scalaire, en se rappelant que X1.X1 = X2.X2 = 1 car nous sommes sur une sphère de rayon 1.
Ce système, quand il a des solutions, donne, en posant q = x1.x2
a = (cos(r1) - cos(r2)*q) / (1 - q^2),
b = (cos(r2) - cos(r1)*q) / (1 - q^2).
q² = 1 ne donne pas de solutions, il faut interpréter et c'est plutôt facile de comprendre pourquoi le produit scalaire ne doit pas faire 1.
On a donc maintenant le point X0.
Il nous reste à trouver la droite (intersection des deux plans)...
5) Encore une fois, on trouve cette droite grâce à un vecteur n, normal aux deux vecteurs normaux des deux plans (des deux disques...), on peut donc utiliser le produit vectoriel.
n = X1^X2,
6) Le paramètre t nous permet d'écrire qu'un point de la droite d'intersection est sous la forme :
X0 + t*n.
Maintenant, ces points doivent être sur la Terre, donc la norme de ces vecteurs (je rappelle, ici point ~ vecteur) doit faire 1.
Elle vérifie donc 1 = (X0 + t*n).(X0 + t*n) = X0.X0 + t²*n^n en se rappelant que X0 et n sont orthogonaux car X0 combinaison de X1 et X2.
(C'est la distance au carré, vu que 1² = 1).
Donc maintenant, on a t = + ou - racine((1 - x0.x0)/n.n).
On a donc nos deux points d'intersection Xi(1,2) = X0 + t(1,2) * n
7) Si on veut repasser en système (lat,long), on fait :
lon = ArcTan(xi,yi)
lat = ArcTan(Sqrt[xi^2+yi^2], zi)
(ce ne sont que les formules de passage d'un système à l'autre).
avec Xi = (xi,yi,zi).
En espérant qu'avoir tout redétaillé t'éclaire...