WGS84 : calcul point d'intersection de 2 segments en 3D (lat/lng/alt)

WGS84 : calcul point d'intersection de 2 segments en 3D (lat/lng/alt) - Algo - Programmation

Marsh Posté le 13-12-2018 à 17:34:34    

Bonjour,
Je galère pour trouver un algo permettant de calculer, en WGS84, l'intersection de 2 segments dont les extrémités sont des points avec leurs coordonnées exprimées en latitude, longitude ET altitude.
J'ai bien trouvé qq sites traitant de calculs en géodésie :
https://www.codeguru.com/cpp/cpp/al [...] ations.htm
http://www.movable-type.co.uk/scripts/latlong.html
Mais c'est qu'en 2D :(
 
Y'a bien ce site : https://github.com/michaelosthege/T [...] s/issues/2
Mais je suis pas bien sûr de comprendre ce qu'il faut faire. J'ai l'impression qu'ils passent par une transformation en coordonnées cartésiennes pour faire les calculs d'intersection.
 
De votre côté, vous n'auriez pas un site qui file directement l'algo pour calculer cette intersection en tenant compte de l'altitude, svp ?
Merci par avance :jap:


Message édité par rufo le 13-12-2018 à 18:02:38

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 13-12-2018 à 17:34:34   

Reply

Marsh Posté le 13-12-2018 à 20:08:07    

Je ne sais pas s'il existe des algos ou non.

 

Pour l'instant ça n'a rien à voir avec WGS84 ou non, mais attention, si tes segments sont définis par uniquement 2 points, les intersections seront possibles que si tes points se trouvent dans un même plan. Un léger décalage des plans ferait en sorte que tes segments ne se croisent pas. Il faut donc probablement commencer par imaginer que tes segments soit en fait des cylindres. Cela risque de compliquer énormément le problème, pour le simplifier, il faut, je le pense faire les calculs avec uniquement des valeurs arrondies. L'arrondi, définissant l'épaisseur du segment.

 

Voilà, voilà, je n'ai pas de réponse, mais je complique le problème. :whistle:
Enfin, ma solution évoquée, si elle fonctionne ne complique plus vraiment le problème. :)

 

Sinon, la conversion des coordonnées WGS84 en données cartésiennes permet d'effectuer le calcul d'intersection plus facilement, le tout étant de trouver la bonne conversion. Une fois que tu as des x, y et z c'est le calcul d'intersection de segments dans l'espace.

 

EDIT : il y a un calcul de conversion WGS84 to x,y,z ici : https://gist.github.com/govert/1b373696c9a27ff4c72a


Message édité par MaybeEijOrNot le 13-12-2018 à 20:15:27

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 13-12-2018 à 20:31:25    

Pour la conversion, j'avais déjà trouvé des algos.
 
Ayant déjà calculé l'intersection de 2 segments en 2D, je me dis que ce point est sans doute le projeté de l'intersection en 3D. Du coup, il suffit sans doute de calculer l'altitude de ce point sur chacun des 2 segments et vérifier que l'altitude est la même (à un arrondi près par ex). Si elle est trop différente, c'est que les 2 segments ne se croisent pas.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 13-12-2018 à 20:50:30    

1- Tu calcules tes vecteurs directeurs (soustraction des coordonnées cartésiennes des deux points définissant ton vecteur).
 
2- http://homeomath2.imingo.net/geoesp8.htm
 
3- 3 cas possibles :
- Un seul point d'intersection est trouvé, tu vérifies qu'il appartient bien à chacun de tes segments, auquel cas il y a intersection sinon il n'y a pas d'intersection.
- Infinité de points d'intersections, tu vérifies qu'au moins une extrémité d'un de tes segments appartienne à l'autre segment, auquel cas il y a intersection sinon il n'y a pas d'intersection.
- Aucun point d'intersection trouvé, il n'y a pas d'intersection.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 13-12-2018 à 21:47:10    

Ce que tu me proposes est l'algo que j'ai trouvé ici : https://github.com/michaelosthege/T [...] s/issues/2
On passe par les coordonnées cartésiennes puis une résolution de système linéaire.
 
Mais penses-tu que l'algo que j'ai énoncé dans mon précédent post est juste ? Ca me ferait moins développer puisque j'ai déjà l'algo pour calculer l'intersection de 2 segments. J'aurais plus qu'à calculer l'altitude de la projection de ce point d'intersection sur les 2 segments et voir s'ils ont la même altitude (à +/- qq mètres près).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 14-12-2018 à 10:48:12    

Pour commencer, on peut éliminer mon idée d'arrondir les coordonnées, ça crée bien un espace discontinu au niveau des points mais les segments restent définis sur un espace continu. Doit surement y avoir un moyen de travailler sur un espace discontinu mais ce doit être très compliqué.
 
Il faut donc en effet travailler autrement. Dans tous les cas il faut commencer par la conversion WGS84 vers cartésien.
 
1- conversion
 
2- Projection des points sur un plan 2D (O,x,y)
 
3- calcul des vecteurs directeurs (soustraction des coordonnées des points définissant le segment)
 
4- calcul de l'intersection des droites définies par les vecteurs directeurs
 
5- si pas d'intersection, reprendre au point n°2 en changeant de plan de projection (O,x,z) ou (O,y,z)
 
6- si aucune intersection, ben aucune intersection
    si intersection, vérifier qu'elle ait bien lieu sur chacun des segments définis :

  • 1 point d'intersection : vérifier qu'il appartienne aux deux segments (choisir un delta d'erreur pouvant être accepté) sinon pas d'intersection
  • infinité de points d'intersection : vérifier qu'au moins une extrémité du segment le plus court appartienne au second segment (choisir un delta d'erreur pouvant être accepté) sinon pas d'intersection


7- si intersection, calculer la position du point d'intersection sur chaque segment dans l'espace 3D puis calculer la distance entre les deux points (choisir un delta d'erreur pouvant être accepté)


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed