Forum général.hors-sujets Déterminer le sens d'un virage dans un chemin OpenStreetMap

Posté par (page perso) .
2
27
mar.
2011

Bonjour, j'aurais besoin d'une petite aide mathématiques. Il s'agit de choses simples, mais j'ai un peu du mal là.

Pour un programme, j'utilise des cartes au format d'OpenStreetMap. Le but est d'obtenir des indications très simples sur les routes, telles que «tourne à droite», «virage à 120m», ou autre…

J'arrive à avoir la distance entre deux nœuds, et aussi à calculer l'angle formé par trois nœuds. Cela permet de repérer à quelle distance on se trouve d'un virage, et aussi de savoir si c'est un gros virage ou pas…

Par contre, je n'arrive pas à trouver un moyen mathématique simple pour savoir si il faut tourner à droite ou à gauche.

J'ai trois points avec des coordonnées GPS. Je pars du premier, j'ai un virage au second, pour arriver au dernier. J'aimerais déterminer le sens du virage au second, car pour l'instant, je n'ai qu'un angle (entre 180° pour une ligne droite, et 0° pour un demi tour).

Donc, est-ce que vous avez une idée pour calculer ça ?

  • # Produit vectoriel

    Posté par (page perso) . Évalué à 8.

    Nommons tes trois noeuds A,B, et C. Tu fais le produit vectoriel entre AB et BC plongés dans l'espace tridimensionnel, de coordonnées (x1,y1,0) et (x2,y2,0). Si le composante en z du produit vectoriel est positive, il s'agit d'un virage à gauche, sinon il s'agit d'un virage à droite. (à condition que je me sois pas planté sur le signe!)

    • [^] # Re: Produit vectoriel

      Posté par (page perso) . Évalué à 4.

      Merci beaucoup, ça fonctionne parfaitement avec à peine quelques opérations de base.

      C'était l'inverse pour le signe, mais rien de grave.

      Encore merci \o/

      Envoyé depuis mon lapin.

  • # un bout de piste

    Posté par . Évalué à 2.

    tu as deja un bout de solution car

    J'ai trois points avec des coordonnées GPS. Je pars du premier, j'ai un virage au second, pour arriver au dernier. J'aimerais déterminer le sens du virage au second, car pour l'instant, je n'ai qu'un angle (entre 180° pour une ligne droite, et 0° pour un demi tour).

    du coup, regarde avec quelques tests, si ca se trouve suivant le sens du virage ton angle va etre positif ou negatif, tu sauras alors s'il est à droite ou à gauche

    • [^] # Re: un bout de piste

      Posté par . Évalué à 0.

      Il a surement un angle non signé (calculé a partir du produit scalaire).
      La solution la plus propre est bien le produit vectoriel cité ci-dessus.

  • # Mauvais algo

    Posté par (page perso) . Évalué à 3.

    180° pour une ligne droite, et 0° pour un demi tour

    Il manque la moitié des angles possibles dans ton algo de calcul d'angle :-)
    Tu devrais avoir de 0° à 360° par exemple. Ou de -180° à +180°, comme tu veux.
    Et là, problème résolu.

    • [^] # Re: Mauvais algo

      Posté par (page perso) . Évalué à 2.

      Changer d'algo pour avoir un angle entre 0 et 360° est une solution, mais je préfère utiliser le théorème d'Al-Kashi. Ce n'est pas la précision absolue dans le cas de la cartographie, mais ça simplifie énormément le code.

      Je suis allé lire du code de JOSM (un éditeur de cartes OpenStreetMap) pour voir comment il fait pour calculer les angles. C'est vraiment beaucoup plus compliqué, pour un gain de précision négligeable par rapport à mon utilisation.

      Envoyé depuis mon lapin.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.