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 :

code c++ pour calculer la distance d'un point par rapport au centre dans un rond


Sujet :

C++

  1. #1
    Membre régulier Avatar de Darkoos0410
    Homme Profil pro
    Technicien ingénierie réseaux et voix
    Inscrit en
    Septembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien ingénierie réseaux et voix

    Informations forums :
    Inscription : Septembre 2019
    Messages : 119
    Points : 93
    Points
    93
    Par défaut code c++ pour calculer la distance d'un point par rapport au centre dans un rond
    Bonjour,

    Je travaille sur un projet pour calculer la distance d'un point dans un rond par rapport au centre et une fois qu'on a le résultat de cette distance on doit le comparer avec le rayon du cercle. (c'est le travaille qu'on me demande de faire). Je ne voit pas du tout ce qui faut mettre dans le main pour que ça marche. Est ce qu'il faut appeler les fonctions ou les mettre dans un booléen ?

    Voici mon fichier classe.h:

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #ifndef CLASSE_H
    #define CLASSE_H
     
    #include <iostream>
    #include <math.h>
    #include <stdio.h>
    using namespace std;
     
    class rond
    {
    private:
    float abscisse, ordonnee, rayon;
    public:
        rond();
        ~rond();
     
        float getabscisse();
        void setabscisse(float a);
        float getordonnee();
        void setordonne(float o);
        float getrayon();
        void setrayon(float r);
        bool EstInterieur(float x, float y);
     
    };
     
     
     
    #endif // CLASSE_H
     
    Voici mon fichier classe.cpp: 
     
    #include "classe.h"
     
    float rond::getabscisse()
    {
        return abscisse;
    }
     
    void rond::setabscisse(float a)
    {
        abscisse=a;
    }
     
    float rond::getordonnee()
    {
        return abscisse;
    }
     
    void rond::setordonne(float o)
    {
        ordonnee=o;
    }
     
    float rond::getrayon()
    {
        return rayon;
    }
     
    void rond::setrayon(float r)
    {
        rayon=r;
    }
     
    bool rond::EstInterieur(float x, float y)
    {
     
        float a=y-ordonnee;
        a=pow (a, 2);
     
        float b=x-abscisse;
        b=pow (b, 2);
     
        double param, resultat;
        param = a + b;
        resultat = sqrt(param);
     
    }
     
    //comparer le resultat (racine carre) avec le rayon
        bool comparedouble (float a, float b)
        {
            return a==b;
        }
     
    Voici mon fichier rectangle.cpp (équivalent du main ):
     
    #include <QCoreApplication>
    #include <classe.h>
    #include <iostream>
    using namespace std;
     
    int main ()
    {
        rond rond;
     
        if (bool)
        {
     
        }
        else
        {
     
        }
     
        return ;
    }
    J'ai commencé a coder des choses dans le main mais je sais pas si c'est bon.

    Merci d'avance pour votre aide

    Bapiste

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 642
    Points
    7 642
    Par défaut
    Bonjour,

    Il semble que tu ne sais pas non plu comment on poste du code. Il y a un bouton [#] et il faut insérer le code entre les balises créées.
    Tu as une fonction de rond qui s'appelle EstInterieur(), cette fonction doit retourner un booléen qui indiquera si c'est vrai ou si c'est faux. Il manque la fin avec la commande return. Ce que tu appelles resultat, c'est la distance du point au centre; le point est à l'intérieur si cette distance est inférieure à quelque_chose. Pour que la fonction termine son boulot, il suffit de rajouter la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        return  resultat < quelque_chose;
    Pour le main(), tu écris "je sais pas si c'est bon", à ton avis?
    Dans le main(), tu dois créer un rond, ce rond doit avoir un centre et un rayon qui ont les valeurs que tu veux. Et évite de l'appeler du même nom que son type.
    Puis tu crées un point donc une abscisse x et une ordonnée y, qui doivent elles aussi avoir une valeur.
    Ensuite il reste à demander à ton rond si le point est bien à l'intérieur; c'est là qu'intervient la fonction EstInterieur().
    Et il serait pas mal de récupérer cette réponse pour l'afficher.

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 360
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 360
    Points : 20 377
    Points
    20 377
    Par défaut
    bonsoir la formule de calcul semble être bonne.
    Pour calculer une distance il faut utiliser le théorème de Pythagore racine carrée de ( a^2 + b^2)
    SInon il n'y a pas de cin/cout dans le main pour saisir et afficher des données se documenter dessus.
    Apparemment vous utilisez Qt donc se documenter dans Qt pour utiliser des zones de saisie

  4. #4
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 324
    Points : 4 134
    Points
    4 134
    Par défaut In or Out
    Bonjour,
    La formule n'est pas bonne car elle ne renvoie rien (pas de return et resultat qui accueille la distance du point au centre ne sert à rien).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    bool rond::EstInterieur(float x, float y)
    { 
        float a = y -ordonnee;
        float b = x -abscisse;
        return a*a + b*b <= rayon*rayon;   // ou a*a + b*b < rayon*rayon si l'intérieur exclut le pourtour
    }
    Il est préférable de comparer des carrés car une multiplication (rayon*rayon) sera sensiblement plus rapide que sqrt (un membre en lecture seule, rayon2 = rayon*rayon, pourrait être utile si le nombre de tests est important).

    Par ailleurs, il y a des erreurs d'inattention :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float rond::getordonnee() {  return abscisse; }
    void rond::setordonne(float o) {  ordonnee=o; }
    Et on peut se demander si c'est bien opportun de déclarer des membres en private si c'est pour écrire des setter et getter qui se contentent d'être transparents.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  5. #5
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 324
    Points : 4 134
    Points
    4 134
    Par défaut
    Bonjour,

    Le code proposé peut être simplifié ainsi :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bool rond::EstInterieur(float x, float y){ 
        y -= ordonnee;
        x -= abscisse;
        return x*x + y*y <= rayon*rayon;   // ou x*x + y*y < rayon*rayon si l'intérieur exclut le pourtour
    }
    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

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

Discussions similaires

  1. Logiciel/site pour faire des calculs de distance entre 2 points sur un chemin de fer
    Par A2ll_ dans le forum SIG : Système d'information Géographique
    Réponses: 1
    Dernier message: 20/06/2017, 14h56
  2. [XL-2007] code vba pour calcul taille mémoire virtuelle et profil windows
    Par marcelisa2 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/03/2013, 15h02
  3. Réponses: 2
    Dernier message: 11/03/2010, 14h53
  4. Calcul % d'ecart d'un point par rapport droite de tendance
    Par mat-tech dans le forum Statistiques, Data Mining et Data Science
    Réponses: 3
    Dernier message: 16/06/2008, 19h23
  5. Code VBA pour calcul compte client > ou < à 100- Urgent
    Par mabeatrice@yahoo.fr dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/03/2007, 16h39

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