IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Distance Point Segment !


Sujet :

Mathématiques

  1. #1
    Membre actif Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Points : 295
    Points
    295
    Par défaut Distance Point Segment !
    Bonjour tout le monde,
    j' ai la problematique suivante :
    j ai 3 coordonnées (latitude longitude) et je dois calculer la distance entre une des coordonnées vis a vis d'un segment formé avec les 2 autres
    j'ai mis en place le code suivant qui me retourne une distance ! mais le probleme c'est que je ne sais pas dans quel unité exprimer cette distance (si c'est en mettre, kilometre etc) si le resultat ne correspond a aucun de ces types pouvez vous m'indiquer comment le convertir

    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    /*
     * Calcule la distance du TkPT par rapport au segment des 2pts .osm
     */
    float distancePointSegment(void){
    	float  a,b,A,B,xH,yH;
    	float x1,x2,y1,y2,xM,yM;
    	float distres=0;
     
    	x1 = atof(coordonnees[1]);
    	y1 = atof(coordonnees[0]);
    	x2 = atof(coordonnees[3]);
    	y2 = atof(coordonnees[2]);
    	xM = atof(lon);
    	yM = atof(lat);
     
    	if (y2==y1){
    	    a=(y2-y1)/(x2-x1);
    	    b=y1-a*x1;
    	    A=xM*(x2-x1)-(y2-y1)*(b-yM);
    	    B=(x2-x1)+a*(y2-y1);
    	    xH=A/B;
    	    distres=abs(xH-xM)*sqrt(1+pow((x2-x1)/(y2-y1),2));
    	}else{
    	     	xH=xM;
    	     	yH=y1;
    	    	distres=sqrt(pow((xH-xM),2)+pow((yH-yM),2));
    	}
    	return distres;
    }
    Merci pour votre aide

  2. #2
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    J'ai 3 coordonnées (latitude longitude)
    Chez moi 1+1 ça fait 2 !
    je dois calculer la distance entre une des coordonnées vis a vis d'un segment formé avec les 2 autres
    Je sais calculer la distance d'un point à un autre, la distance d'un point à une droite, à un segment. Une coordonnée est un NOMBRE. Et entre le "entre" et le "vis à vis" on attrape le tournis.
    Sérieusement il serait temps que les posts soient rédigés en un langage, sinon scientifiquement correct, au moins syntaxiquement correct.
    NB: Si tu es étranger ne tiens pas compte de ma remarque.(mais les DOM c'est bien la France, non ?)
    Pour finir comment veux tu qu'on réponde à ce genre de charabias.
    Je pourrai reformuler ta question, mais je préférerais que tu le fasses.

  3. #3
    Membre actif Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Points : 295
    Points
    295
    Par défaut
    un simple : c'est mal formulé j'aurais compri !

    J'ai 3 coordonnées (latitude longitude)
    Je voulais dire j'ai 3 points !
    je te rassure chez moi aussi ca fait 2 : 1+1

  4. #4
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Tu es ici en coordonnées 'sphériques' (rho, phi ,theta) en fait la valeur de rho est constante parce que tes points sont sur la surface d'une sphère. Donc sur une sphère (rho fixe) un point est effectivement caractérisée par deux angles et deux seulement. Mais ce que tu sembles ignorer c'est que sur la surface d'une sphère les 'segments' ne sont pas des portions de droite au sens usuel, ce sont des arcs de grands cercles. Les formules permettant de calculer la distance de deux points en fonction de leurs coordonnées sphériques sont données par les formules d'Haversine:http://en.wikipedia.org/wiki/Haversine_formula
    Quand à la distance d'un point à un segment elle est donnée par:
    d(P,[AB])=min(d(P,A),d(P,B),d(P,H)) où H est la projection orthogonale de P sur (AB), mais là encore il s'agit de géométrie sphérique, et les notions de 'segment', 'droite', 'disatnce' doivent être compris au sens de la géométrie sphérique.

  5. #5
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Citation Envoyé par Zavonen Voir le message
    [...}la distance d'un point à un segment [...] est donnée par:
    d(P,[AB])=min(d(P,A),d(P,B),d(P,H)) où H est la projection orthogonale de P sur (AB)[...]
    C'est d(P,H) uniquement si H est entre A et B, sinon c'est bien min(d(P,A),d(P,B)).

    Maintenant, la notion de "entre" sur une sphère...

  6. #6
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    En pratique, il faudrait connaître la taille du domaine dans lequel se trouvent tes points. S'ils sont très éloignés, c'est vrai, comme l'écrit Zavonen, que tu dois travailler en coordonnées sphériques et que la ligne reliant deux points est un arc de cercle, et non un segment de droite. En revanche, si les points sont proches, une projection (Mercator, Lambert ou autre) sera plus simple et ne produira qu'une erreur négligeable.
    Jean-Marc Blanc

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    encore un fois je répète : transformer des latitudes/longitudes en mètres dépend de la projection utilisée...

    Il faut donc connaître la projection utilisée, transformer les lat/lon en coordonnées rectangulaires (mètres), et calculer la distance.

    Sinon Jean-Marc a raison, ce sera des coordonnées sphériques (ou plutôt elliptiques), mais la vraie distance devra tenir compte de l'ellipsoide utilisé (WGS 84 ??) , avec son vrai rayon de la Terre, son vrai centre X,Y,Z, et sa vraie approximation pour cette partie du globe..... Très nettement plus compliqué et peut-être pas ce que tu veux...

  8. #8
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Et je me répète aussi, mais sur la sphère, 2 points ne définissent pas un segment (il y en a deux).

  9. #9
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Orthodromie

  10. #10
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour

    Je ravive ce sujet pour obtenir une réponse à la question suivante :

    Comment connaitre de quel côté du segment se trouve le point ?

    Voici ma source en Delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Function TMapForm.DistPntSegm(Pnt, Pnt1, Pnt2 : PointFloat) : TPntToSegm;
    Var
     Len, ParamR : Double;
     PntR : PointFloat;
    begin                              
      Result.x := 0; Result.y := 0; Result.Dist := RefMaxDist;
      Len := Dist2Pnts(Pnt1, Pnt2);
      ParamR := (((Pnt.X - Pnt1.X)*(Pnt2.X - Pnt1.X)) + ((Pnt.Y - Pnt1.Y)*(Pnt2.Y - Pnt1.Y)))/Sqr(Len);
      if (ParamR > 0) and (ParamR < 1) then
      begin  //  La projection du point est sur le segment aux coordonnées
        PntR.x := Pnt1.X + ParamR * (Pnt2.X - Pnt1.X);
        PntR.y := Pnt1.Y + ParamR * (Pnt2.Y - Pnt1.Y);
        Result.x := PntR.x; // X point projection de Pnt.X sur le segment
        Result.y := PntR.y; // Y point projection de Pnt.Y sur le segment
        Result.Dist := Dist2Pnts(Pnt, PntR); //  Longueur du segment
      end;
    end;
    Merci d'avance

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    bonjour

    une bonne source d'informations (entre autres) est la FAQ des UseNet Newsgroup, en particulier celle du newsgroup comp.graphics.algorithms :

    http://www.faqs.org/faqs/graphics/algorithms-faq/

    Voir les points 1.02 et 1.03


  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Pb transformation de coord
    Bonjour

    je réalise une étude sur les radars utilisés en aéronautique et pour cela j'ai besoin de convertir des coordonnées de la manière suivante :
    j'ai bien essayé de me débrouiller entre les solutions aux réponses apportées et le lien de newsgroup (super bien fait d'ailleurs!) mais je ne suis pas parvenu à m'en sortir.
    voila mon pb :
    je connais un point (mon radar) en latitude, longitude
    pour chaque radar, je connais tout les plots l'entourant (les petits avions) en coordonnées polaires Rho et Theta

    j'ai besoin de convertir l'emplacement défini en (rho, theta) avec comme origine ma latitude / longitude du radar en latitude / longitude du plot lui meme.

    je ne sais pas si j'ai réussi à me faire comprendre. est ce que je dois utilisé une proj style WGS84 ou je ne connais strictement rien? je suis un peu perdu

    merci pour votre aide

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    je dirais qu'il faut connaître quel est le rapport de projection utilisé sur ton écran, ainsi que la projection utilisée.

    Normalement, il doit y avoir quelque part cette spec, soit dans la doc soit dans le code du logiciel de radar, avec vraisemblablement une formule..

    Ensuite, c'est simple...

    Par contre, il faut soit le code soit la doc du radar et surtout de l'installation, avec l'écran..


    PS: oui, vraisemblablement le système de coordonées sera WGS84..

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    je dirais qu'il faut connaître quel est le rapport de projection utilisé sur ton écran, ainsi que la projection utilisée.
    le radar utilise une projection orthogonale sur le sol. c'est cette distance en NM, que je récupère. de plus je ne sais pas s'il y a une intégration de la variation du NM (dépend un tt petit peu de lat/long) ou de la variation du rayon de la terre étant donné que la distance max des avions est d'environ 200 NM (360km)

    pour l'écran, enfin la visualisation si j'ai bien compris j'utilise google earth

    Ensuite, c'est simple...
    tu connais la formule magique??

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/06/2014, 20h27
  2. distance point - segment
    Par tawfiknejeh dans le forum Mathématiques
    Réponses: 9
    Dernier message: 04/02/2013, 21h30
  3. Distance point droite: détail de l'équation
    Par darkman19320 dans le forum Mathématiques
    Réponses: 3
    Dernier message: 04/08/2010, 22h12
  4. Distance d'un point à un segment de droite
    Par defluc dans le forum Mathématiques
    Réponses: 63
    Dernier message: 08/09/2009, 00h49
  5. [mécanique] distance point/surface
    Par NailMaker dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 31/05/2006, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo