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

  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 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 !

    D�sol� pour les oublis, en particulier pour l'inclusion de math.h.
    Sinon pour le reste :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    #define pi  3.1415926535897932384626
    #define Pi  6.2831853071795864769252
    #define pi2 1.5707963267948966192313
    A plus !

  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
    Bonsoir,
    es-ce que �a � march�.

    n'oublis pas

  9. #9
    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
    En cas de besoin,
    voici un liens qui peut t'int�rr�sser : c'est par l�

  10. #10
    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

  11. #11
    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�

  12. #12
    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

  13. #13
    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.

  14. #14
    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
    Erf

    Tant pis pour moi, je vais continuer avec la m�thode henderson.



    Merci beaucoup

  15. #15
    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
    Boujour,

    Je remercie tous ceux qui m'ont aid� � comprendre comment proceder pour repr�senter une fonction � l'�cran et en particulier � Henderson et � Kmaniche.
    Je signale � ce dernier qu'il existe un composant freeware pour "parser" (sic)
    une expression mathematique � l'adresse suivante :

    http://www.aidaim.com/products/download.php

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