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++Builder Discussion :

Representer une fonction à l'écran


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 57
    Par défaut Representer une fonction à l'écran
    Bonjour,

    Je suis relativement novice en CBuilder 6 et je voudrais représenter une fonction mathématique (par exemple y=sin(x)) à l'écran.

    Une âme charitable voudrait-elle m'expliquer le (ou les) composant(s) visuels à employer (s'il en existe) ou bien les methodes et les objets utilisables et comment les utiliser.

    J'ai bien lu l'aide de CBuilder, mais je ne comprends pas comment pratiquer concrétement ce qui est expliqué.

    Merci pour toute aide.

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Utilise le composant TChart, il permet d'afficher des graphiques.

  3. #3
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonjour,
    tu peux utiliser un composant TImage ou TShape ou encore TPaintBox; il faut déssiner les axes, les graduations.

    Il faut toutefois définir les positions du repert, et ne pas oublier que le (0, 0) est en haut à gauche.

    Reste que la fonction dois être définie dans la source du programme, sinon si tu compte utiliser un TEdit il faudra que tu fais une interprétation.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Tout dépend de la façon dont tu as envie de réaliser cet affichage.

    On peut par exemple utiliser la form comme support du graphisme.
    Pour celà on peut se servir d'un bitmap qui est utile dans les versions de BCB ne disposant pas du double buffering.
    Il suffit de déclarer en gobal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
    Dans la OnClose de la form il faudra libérer la mémoire et donc supprimer ce bitmap :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete Bitmap;
    Bitmap = NULL;
    On peut développer une petite méthode qu'il faudra déclarer dans la classe de la form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public:		// Déclarations de l'utilisateur
        ...
        void __fastcall DrawBitmap();
    Voici son contenu :

    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
    void __fastcall TForm1::DrawBitmap()
    {
    if(Bitmap != NULL)
        {
        //On dimensionne le bitmap... ici on lui donne celle de la zone client de la form
        int we = ClientWidth;
        int he = ClientHeight;
        if(Bitmap->Width != we) Bitmap->Width = we;
        if(Bitmap->Height != he) Bitmap->Height = he;
        //Pour simplifier la rédaction du code
        TCanvas *C = Bitmap->Canvas;
        //On efface le bitmap
        C->Brush->Style = bsSolid;
        C->Brush->Color = Color;
        C->FillRect(Rect(0,0,we,he));
        //On va dessiner les fonctions
        C->Pen->Mode = pmCopy;
        C->Pen->Style = psSolid;
        C->Pen->Color = clSilver; //couleur de l'axe des y
        int axe = he / 2;
        int amplitude = axe - 4; //amplitude max en y
        double s;
     
        //Quelques fonctions, comme par exemple pour l'audio
        //ce ne sont que des exemples...
     
        //Signal sinusoïdal
        C->Pen->Color = clLime;
        C->MoveTo(we,axe); C->LineTo(0,axe);
        for(int x = 1; x < we; x++)
            {
            s = sin(x / 220.5 * Pi) * amplitude;
            C->LineTo(x, axe - s);
            }
     
        //Signal rectangulaire
        C->Pen->Color = clAqua;
        C->MoveTo(0,axe);
        for(int x = 1; x < we; x++)
            {
            s = fmod(x / 220.5 * Pi, Pi);
            if(s < pi) s = 1.0;
            else s = -1.0 ;
            s = s * amplitude;
            C->LineTo(x, axe - s);
            }
     
        //Signal triangulaire
        C->Pen->Color = clYellow;
        C->MoveTo(0,axe);
        for(int x = 1; x < we; x++)
            {
            s = fmod( pi2 + (x / 220.5 * Pi), Pi);
            s = (pi - s) / pi;
            if(s < 0.0) s = -s;
            s = (1.0 - (s * 2.0)) * amplitude;
            C->LineTo(x, axe - s);
            }
     
        //Signal Dent de scie
        C->Pen->Color = clWhite;
        C->MoveTo(0,axe);
        for(int x = 1; x < we; x++)
            {
            s = fmod(x / 220.5 * Pi, Pi);
            s = ((pi - s) / pi) * amplitude;
            C->LineTo(x, axe - s);
            }
     
        //Dessine le bitmap sur la form
        Canvas->Draw(0,0,Bitmap);
        }
    }
    Cette méthode devra être appelée à chaque fois que la form se redessine ou est modifiée donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall TForm1::FormPaint(TObject *Sender)
    {
    DrawBitmap();
    }
     
    void __fastcall TForm1::FormResize(TObject *Sender)
    {
    DrawBitmap();
    }
    Il est clair que j'aurais pu modéliser la fonction triangle et celle de la dent de scie autrement !
    Ici, c'est juste un exemple pour mettre en oeuvre la périodicité !

    A plus !

  5. #5
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonjour,

    "Henderson", ça marche, je viens de le tester par moi même.
    Reste deux chôses :
    1.
    2.
    Remplacer : pi, PI, Pi2 par : M_PI

    Bon courage ...

  6. #6
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Ah, juste une idée;

    pourquoi ne pas mettre le nom du canvas dans l'appel de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void __fastcall TForm1::DrawBitmap()
    de cette façon,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void __fastcall TForm1::DrawBitmap(TCanvas *pCanvas)
    {
     ...
     ...
     ...
     ...
     pCanvas -> Draw(0, 0, Bitmap) ;
    }
    Bonne continuation.

  7. #7
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Citation Envoyé par pottiez
    Utilise le composant TChart, il permet d'afficher des graphiques.
    J'utilise BCB version 4 en standard. Et le composant TChart n'existe pas dans la barre supplément.

    Est il possible de télécharger ce composant? (si oui où?)

    merci

  8. #8
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Citation Envoyé par Masmeta
    J'utilise BCB version 4 en standard. Et le composant TChart n'existe pas dans la barre supplément.

    Est il possible de télécharger ce composant? (si oui où?)

    merci
    Oui, mais en demo biensûr., c'est par là

  9. #9
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Qu'appelles tu en demo?

    Il n'y a pas toute les fonctionnalité?

    J'ai cherché un peu sur leur site mais j'ai pas trouvé les restrictions de l'utilisation en démo

  10. #10
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Citation Envoyé par Masmeta
    Qu'appelles tu en demo?

    Il n'y a pas toute les fonctionnalité?

    J'ai cherché un peu sur leur site mais j'ai pas trouvé les restrictions de l'utilisation en démo
    Une version demonstrative, de 30 jours.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/08/2013, 09h09
  2. Réponses: 3
    Dernier message: 02/08/2011, 16h05
  3. representation polaire d une fonction cartesienne
    Par yabbiyou dans le forum MATLAB
    Réponses: 3
    Dernier message: 06/04/2009, 07h40
  4. Bloquer l'écran avec une fonction
    Par mitherkiller dans le forum Windows
    Réponses: 6
    Dernier message: 04/04/2007, 08h57
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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