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

Python Discussion :

Problème calcul distance entre points


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 31
    Points : 33
    Points
    33
    Par défaut Problème calcul distance entre points
    Bien le bonjour,

    C'est la première que je poste sur un forum donc excuser moi si jamais des choses essentiel dans mon message.
    voila pour un projet je dois calculer toutes les distances entre plusieurs sans faire de doublon et voici mon 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
     
    def calculDistances(nombreProduits):
        i=0
        k=0
        n=0
        j=0
        m=0
        while k < nombreProduits:
     
            while m < nombreProduits:
     
                x1=coordonneesPointX[k]
                y1=coordonneesPointY[k]
                x2=coordonneesPointX[m+1]
                y2=coordonneesPointY[m+1]
     
                print('x1: {}, y1: {}, x2: {}, y2: {}'.format(x1, y1, x2, y2))
                print('k:{}, m:{}'.format(k, m+1))
                m+=1
     
                distancesEntrePoints.insert(n, math.sqrt(math.pow((x2-x1),2)+math.pow((y2-y1),2)))
                n+=1
     
            k+=1
            m=k
    Petite précision: nombreProduits est le nombre de points (dont les coordonnées sont saisie plus haut dans mon programme) et il y a un point en plus qui est Origine (0,0)

    Seulement, voila mon problème: quand je saisie des points dans l' "ordre", j'obtient un résultant satisfaisant comme suit:

    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
     
    Nombre de produits: 3
    X: 3
    Y: 4
    X: 6
    Y: 8
    X: 9
    Y: 12
    k:0, m:1
    k:0, m:2
    k:0, m:3
    k:1, m:2
    k:1, m:3
    k:2, m:3
    Connexion(s):  6
    Liste points:  ['Origine', 'A', 'B', 'C']
    CoordonnéesX;  [0, 3, 6, 9]
    CoordonnéesY:  [0, 4, 8, 12]
    [5.0, 10.0, 15.0, 5.0, 10.0, 5.0] #Distances [OA, OB, OC, AB, AC, BC]
    mais quand mais points sont saisies dans le "désordre", j'obtient des résultats erroné:

    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
     
    Nombre de produits: 3
    X: 9
    Y: 12
    X: 6
    Y: 8
    X: 3
    Y: 4
    k:0, m:1
    k:0, m:2
    k:0, m:3
    k:1, m:2
    k:1, m:3
    k:2, m:3
    Connexion(s):  6
    Liste points:  ['Origine', 'A', 'B', 'C']
    CoordonnéesX;  [0, 9, 6, 3]
    CoordonnéesY:  [0, 12, 8, 4]
    [15.0, 15.0, 5.0, 5.0, 10.0, 5.0]
    Pourriez-vous m'aider à régler ce problème? Merci d'avance

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Elle est bizarre cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    distancesEntrePoints.insert(n, math.sqrt(math.pow((x2-x1),2)+math.pow((y2-y1),2)))
    Faites des print avant pour voir si n vaut bien ce qu'il faut, ainsi que la distance.
    D'ailleurs c'est étrange ces insert. distanceEntrePoints, c'est déclaré ou ? Car en principe au départ ca devrait etre une liste vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    distancesEntrePoints=[]
    à laquelle vous ajouter les valeurs trouver au fur et à mesure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    distancesEntrePoints.append(dist)
    (où dist est ce que vous pensez)

    Ensuite dans votre fonction il ne faut pas utiliser des variables qui viennent d'ailleurs ! En particulier coordonneesPointX et coordonneesPointY. Il faudrait spécifier d'où viennent ils en les passant en arguments à la fonction appelante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def calculDistances(coordonneesPointX,coordonneesPointY):
        nombreProduits = len(coordonneePointX)-1  ### qui est d'ailleurs normalement aussi égal à len(coordonneesPointY)-1
    D'ailleurs pourquoi ne pas juste traiter l'origine comme si cela avait été saisi par l'utilisateur ? Et donc au lieu de considérer nombreProduits (par l'utilisateur) plus 1 pour l'origine mis à part, pourquoi ne pas juste écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nombreDePoints = len(coordonneePointX)
    Car de toute facon inutile de garder ce traitement de faveur pour l'origine, dans coordonneesPointX et coordonneesPointY il apparait au même titre que les autres !

    Et puis vos while là ca embrouille trop. On utilise while lorsqu'on ne sait pas quand précisément la boucle va s'arreter. Là vous savez, alors utiliser for, et ca vous évitera les truc du type n+=1. Surtout qu'en plus à la fin vous écrivez m=k !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for k in range(nombreDePoints) :
            for m in range(k+1,nombreDePoints) :

    Difficile d'en dire plus avec ce que tu nous présente.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 31
    Points : 33
    Points
    33
    Par défaut
    Merci beaucoup lg_50!

    J'ai du coup réécris mon code avec les conseils que tu m'as donnée:
    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
     
    def calculDistances(nombreProduits, coordonneesPointX, coordonneesPointY, distancesEntrePoints):
     
        for k in range(0,nombreProduits):
     
            for m in range(k+1, nombreProduits+1):
     
                x1=coordonneesPointX[k]
                y1=coordonneesPointY[k]
                x2=coordonneesPointX[m]
                y2=coordonneesPointY[m]
     
                print('x1:{}   y1: {}   x2:{}   y2:{}\n'.format(x1, y1, x2, y2))
                print('k:{}   m:{}\n'.format(k, m))
     
                dist= math.sqrt(math.pow((x2-x1),2)+math.pow((y2-y1),2))
     
                distancesEntrePoints.append(dist)
    Et tout les resultats ne sont plus erroné:

    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
    30
    31
    32
    33
    34
    35
    36
    37
     
    Nombre de produits: 3
    X: 9
    Y: 12
    X: 6
    Y: 8
    X: 3
    Y: 4
    x1:0   y1: 0   x2:9   y2:12
     
    k:0   m:1
     
    x1:0   y1: 0   x2:6   y2:8
     
    k:0   m:2
     
    x1:0   y1: 0   x2:3   y2:4
     
    k:0   m:3
     
    x1:9   y1: 12   x2:6   y2:8
     
    k:1   m:2
     
    x1:9   y1: 12   x2:3   y2:4
     
    k:1   m:3
     
    x1:6   y1: 8   x2:3   y2:4
     
    k:2   m:3
     
    Connexion(s):  6
    Liste points:  ['Origine', 'A', 'B', 'C']
    CoordonnéesX;  [0, 9, 6, 3]
    CoordonnéesY:  [0, 12, 8, 4]
    Distances:  [15.0, 10.0, 5.0, 5.0, 10.0, 5.0]
    Encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/01/2017, 11h04
  2. Calcul distance entre un point et une poly3D
    Par LoicL89 dans le forum Lisp
    Réponses: 2
    Dernier message: 15/07/2015, 19h54
  3. Calcule de distance entre point d'un JFreeChart
    Par SLAMADHOUHA dans le forum 2D
    Réponses: 1
    Dernier message: 06/07/2015, 09h10
  4. Calcul de distance entre points
    Par yoshï dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 13/01/2011, 12h35
  5. Calcule distance entre 2 points
    Par abir001 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 08/04/2010, 11h12

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