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

 C++ Discussion :

calculer la distance entre 2 point en c++


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 22
    Points : 15
    Points
    15
    Par défaut calculer la distance entre 2 point en c++
    je veux calculer la distance entre 2 point en c++ en passant par les classe et et une fonction distance qui calcul la distance entre les deux point mais je veux que le fonction prenne 2 argument de type de la classe point
    exemple
    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
     
    class Point
    {
    int x;
    int y;
    public:
    double  distance(Point p1, Point p2);
    void affiche();
    };
    double Point:: distance(Point p1, Point p2);
    {
    double res;
    res=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p1.y));
    cout<<" la distance entre les deux points est: "<<res<<"\n"<<endl;
    }
    void Point:: affiche()
    {
       cout << "\nLes coordonnees du point sont " << x << " et " << y << "\n" ;
       cout << "\nadresse de Point  : "<<this<<endl;   
    }
    j'arrive pas a savoir comment faire appel a ma fonction distance pour calculer la distance entre 2 points par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    main()
    {
    Point p1(3.4,5.7);
    Point p2(7.4,9.7);
    }
    Merci de votre aide.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Tout d'abord, je dirais que la méthode distance() est une méthode statique de ta classe car elle n'utilise pas les variables membre de ta classe. Dans le .h, cela donnerait quelquechose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Point
    {
    int x;
    int y;
     
    public:
       static double  distance(Point p1, Point p2);
       void affiche();
    };
    Cela ne change rien au code cpp de ta classe. et dans le main, cela donnerait un truc genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    main()
    {
    Point p1(3.4,5.7);
    Point p2(7.4,9.7);
    double distance = CPoint::distance(p1, p2);
    }
    Après, quelques finesses, tu n'as pas besoin de passer tes point par copié, tu peux les passer par référence, cela évite une copie sur la pile, c'est pas très grave dans ton cas car l'objet n'est pas très gros mais autant prendre les bonnes habitudes.

    Ensuite comme tes paramètres ne sont pas modifiés, tu peux rajouter le mot clé const pour indiquer qu'il ne sont pas modifiés.

    Cela donne maintenant pour le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Point
    {
    int x;
    int y;
     
    public:
       static double  distance(const Point & p1, const Point & p2);
       void affiche();
    };
    pour le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    double Point:: distance(const Point & p1, const Point & p2);
    {
       double res;
       res=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p1.y));
       cout<<" la distance entre les deux points est: "<<res<<"\n"<<endl;
    }

  3. #3
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    100% d'accord avec mon collègue ram !
    Ensuite, je rajouterai au moins un opérateur << pour l'affichage, plutôt que cette méthode Afficher(). C'est plus... sexy!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    ça compile très bien merci de ton aide mais j'ai pas bien compris cette ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double distance = Point::distance(p1, p2);

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    C'est la manière pour appeler une méthode statique d'un classe.

    Une méthode statique n'utilise pas les variables membres de l'instance de la classe et n'a pas de pointeur this sur l'instance de la classe courante.

    Il n'est donc pas nécessaire d'instancier un objet pour appeler une méthode statique, c'est pour cela qu'on l'écrit comme cela.

  6. #6
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    lien vers la sur les fonctions membres statiques ICI

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Ceci dit, étant donné qu'il y a d'office deux points lorsque l'on décide connaitre la distance qui les séparent, pourquoi ne pas se dire que le premier doit calculer la distance entre ... lui et le deuxième, et donc en faire une méthode "classique"

    La seule chose, c'est que l'on supprime un des arguments

    Au final, cela pourrait se présenter sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Point
    {
        public:
            /* tout ce qu'il faut */
            double distance (Point const& p2) const
            {
                 /*calculer la distance entre les membre de (*this) et
                  * ceux de p2 et renvoyer le résultat
                  */
            }
        private:
            int x;
            int y;
    };
    qui serait utilisée sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Point p1(/*paramètres*/);
    Point p2(/*paramètres*/);
    double d = p1.distance(p2);
    /* ou, la distance "inverse" */
    double d2 = p2(p1);

Discussions similaires

  1. Calcul de distance entre deux points
    Par atlantis123 dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 02/06/2011, 00h36
  2. calcul de distance entre 2 points
    Par c4cf6 dans le forum Android
    Réponses: 3
    Dernier message: 13/06/2010, 11h17
  3. calcul de distance entre deux points.
    Par jamsgoodon dans le forum Bioinformatique
    Réponses: 0
    Dernier message: 31/05/2010, 15h06
  4. [Google API v3] Calcul de distance entre plusieurs points
    Par akrogames dans le forum APIs Google
    Réponses: 1
    Dernier message: 08/04/2010, 17h35
  5. Calcul de distance entre deux points en WGS84
    Par marieR dans le forum Langage
    Réponses: 5
    Dernier message: 03/08/2006, 17h07

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