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 :

courbe à partir de mesures grace à Tcanvas


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Par défaut courbe à partir de mesures grace à Tcanvas
    Bonjour, je fais une acquisition de donnée via une laison GPIB.
    ces données sont stockées dans une matrice et j'aimerais tracer dans une Timage la courbe correspondante.
    je me rends compte que la courbe obtenue ne présente que l'allure de celle désirée mais pas la courbe exacte.
    le code est le suivant:
    ----------------------------------------------------------------------------------
    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
    void Dessine()
    {
     
    int X0,Y0,X,Y,X_max,Y_max,Y_size;
    float Id_max=0.001;
    float Id_min=100;
     
     
    // dessin du graphique
    Form1->Image2->Canvas->Pen->Color=clBlack;
    Form1->Image2->Canvas->Brush->Color=clWhite;
     
    Y_size = ( Form1->Height - 300)/2;
    X0 = 20;
    X_max=Form1->Width-2*X0;
    Y0=(Form1->Height/2 + 20);
    Y_max=Y0-Y_size;
    Form1->Image2->Canvas->Rectangle(X0-10,Y_max-10,X_max+10,Y0+10);
     
    Form1->Image2->Canvas->MoveTo(X0,Y0);
     
    // determination du maximum pour l'echele des y
    for (int i=0;i<100;i++)
            {
            if ((tab[1][i])>Id_max){Id_max=tab[1][i];};
            if ((tab[1][i])<Id_min){Id_min=tab[1][i];};
            }
     
     
    //creation des axes
    Form1->Image2->Canvas->MoveTo(X0-5,Y0);
    Form1->Image2->Canvas->LineTo(X_max,Y0);
    Form1->Image2->Canvas->MoveTo(X0,Y0+5);
    Form1->Image2->Canvas->LineTo(X0,Y_max);
     
    for (int i=0;i<100;i++)
            {
            X=(tab[0][i])*100/(Form1->Width-40);
            Y=(tab[1][i])*Id_max/(Form1->Height-50);
            Form1->Image2->Canvas->LineTo(X0+X,Y0-Y);
            }
     
    // dessin du diagramme proprement dit
    Form1->Image2->Canvas->Pen->Color=clRed;
    Form1->Image2->Canvas->MoveTo(X0,Y0-tab[1][0]*Y_max/Id_max);
    for (int i=0;i<100;i++)
            {
            Form1->Image2->Canvas->LineTo(X0+i*X_max/100,Y0-(tab[1][i]*Y_max/Id_max));
            }
    -------------------------------------------------------------------------------
    le résultat obtenu se trouve en PJ
    une image de la courbe souhaité y est aussi.

    Comment faire pour avoir des axes dynamiques avec des graduations??

    merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Je ne sais pas comment régler ton problème.

    Je voulais juste te dire qu'il existe des balises pour metrte du code dans le forum. Sélectionne ton code et clique sur # (CODE). Sa devrais être plus facile à lire.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Par défaut
    Pourquoi ne pas utiliser TChart? Ca trace un graphique à partir de tableaux, avec graduations, légendes, etc.

  4. #4
    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
    Pourquoi ne pas utiliser SDL Components Suite dont il existe une version "light" gratuite, téléchargable depuis leur site ?
    Cette suite comporte un composant trés élaboré qui affiche les courbes, permet la gestion des axes et de la sortie sur imprimante.

  5. #5
    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 !

    Chaque ligne des graduatations horizontales devrait se dessine avec MoveTo() et LineTo()

    Le point [0] servant à se positionner avec MoveTo, la boucle i devrait commencer en 1

    On calcule bien Id_min et Id_max... mais je pense qu'on exploite pas à fond !

    Il faudrait vérifier ce qu'il en est exactement de la bonne adéquation entre la dilation verticale, l'ambitus de cette courbe (Id_max - Id_min) et surtout par rapport à Id_min.

    Il s'agit en effet de déterminer si la courbe se dessine par rapport à l'intervalle des lignes de graduations (de Id_min à Id_max dans un système de graduation flottant) ou la hauteur complète du graphisme (de 0 à max).

    Par exemple, si les valeurs sont comprises entre 100.0 et 101.0 il est clair qu'on ne verra pas grand chose !

    On a donc au moins :

    double ambitus = id_max - id_min
    double gain_vertical = ambitus / .... donc à déterminer

    y = (Valeur[i] - id_min) * gain_vertical

    Il est donc plus facile de dessiner la courbe dans un nouveau référentiel définit par les graduations horizontales, la position de l'axe des abscisses n'étant plus qu'anecdotique.

    Pour l'écriture verticale, il faudra passer par une fonte logique.

    A plus !

    NB : Je n'ai pas mis les balises de code volontairement !!!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Par défaut
    Citation Envoyé par Pierre Levy Voir le message
    Pourquoi ne pas utiliser SDL Components Suite dont il existe une version "light" gratuite, téléchargable depuis leur site ?
    Cette suite comporte un composant trés élaboré qui affiche les courbes, permet la gestion des axes et de la sortie sur imprimante.
    Pierre, sur quel site puis-je trouver cette Suite? L'as-tu comparée à TeeChart?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Par défaut
    merci à tous pour ces indications. je vais les tester et vous faire un retour.

  8. #8
    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
    Pour
    Felip_
    :

    Je n'ai plus l'URL mais une recherche Google avec SDL Components Suite Lohninger devrait te donner l'adresse du site.

    C'est une suite de composants que je trouve très utile et très complète pour le graphisme scientifique.

  9. #9
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 38
    Par défaut
    Crayon, Pierre, merci. Je vais tester la suite SDL.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Par défaut
    merci à tous pour l'aide apportée. Finalemtn j'ai opté pour un objet de type TChart et ca marche plutot bien.
    Je conseille aussi la suite SDL pour des affichages encore plus évolués.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/09/2014, 23h08
  2. Réponses: 6
    Dernier message: 13/11/2007, 10h59
  3. dessiner une courbe à partir d'un tableau de valeur
    Par bob75018 dans le forum C++Builder
    Réponses: 8
    Dernier message: 15/06/2007, 04h29
  4. [JGraph]dessiner une courbe à partir de données
    Par marwaza22 dans le forum 2D
    Réponses: 1
    Dernier message: 16/11/2006, 16h16
  5. courbe à partir d'un tableau
    Par chafcha dans le forum MFC
    Réponses: 3
    Dernier message: 26/02/2004, 08h53

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