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

 Delphi Discussion :

Tracer des courbes à partir d'un tableau de points


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 29
    Points
    29
    Par défaut Tracer des courbes à partir d'un tableau de points
    Bonjour

    Je voudrais tracer sur mon appli une courbe à partir de données acquises et stockées dans un tableau, ou un memo ... peu importe.

    Je récupère par exemple des valeurs de température (par le port USB) toutes les 10 minutes et je les stocke en mémoire.
    Ensuite je fais un copier coller de ces valeurs pour tracer la courbe de variation sur Excel. Bon tout ça fonctionne bien mais ça me plait pas.

    Je voudrais pouvoir tracer la courbe sur une nouvelle fiche par exemple quand je clique sur un bouton "Tracer Courbe".

    Or je ne sais absolument pas comment m'y prendre ...
    Existe-t-il un composant Delphi (6) qui fait ça ?

    ????

    Merci de votre aide.

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 150
    Points
    3 150
    Par défaut
    Bonjour,

    tu peux t'inspirer de ce projet sur le site Phidels :

    Tracé de courbe

    (auteur Jean-Yves Quéinec)

    A+

    Charly

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 111
    Points : 171
    Points
    171
    Par défaut
    bon jour

    voir les coposant suivent:
    Chart, DBChart, chartfx, vtchart, DecisionGraph, qrchart tous c'est composant on une relation avec les graphe et des courbe
    bon courage amie

  4. #4
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Voici un tracé sommaire à partir de points en coordonnées mathématiques...
    Si ça peut aider...

    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
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
     
    type
     reel=extended;
     
     TReelpoint=record
      x,y:reel;
     end;
     
     Tgraphique=class(Tbitmap)
     private
      xo,yo,xmin,ymin,xmax,ymax,Gx,Gy,taillex,tailley:reel;
      public
      constructor Create(w,h:integer;x1,x2,y1,y2:reel);reintroduce;overload;
      procedure tracerepere(penw:integer;coulpen,clfond:Tcolor);
      procedure tracecourbe(trajectoire:array of TReelpoint);
      Function ptinfo(x,y:reel):Tpoint;
     end;
     
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure FormResize(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Déclarations privées }
        courbe: array of TReelpoint;
        graphique:TGraphique;
      public
        { Déclarations publiques }
      end;
     
    function pt(x,y:reel):TReelpoint;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    function pt(x,y:reel):TReelpoint;
    begin
     result.x:=x;
     result.y:=y;
    end;
     
    constructor Tgraphique.Create(w,h:integer;x1,x2,y1,y2:reel);
    begin
     inherited create;
     width:=w;
     height:=h;
     xmin:=x1;
     xmax:=x2;
     ymin:=y1;
     ymax:=y2;
     taillex:=xmax-xmin;
     tailley:=ymax-ymin;
     Gx:=width/taillex;
     Gy:=height/tailley;
     xo:=-xmin*Gx;
     yo:=ymax*Gy;
    end;
     
    procedure TGraphique.tracecourbe(trajectoire:array of TReelpoint);//tracé de la courbe à partir d'un tableau de points en coods mathématiques
    var
        traj:array of Tpoint;
        i:integer;
    begin
     setlength(traj,length(trajectoire));
     for i:=low(traj) to high(traj) do begin
     traj[i]:=ptinfo(trajectoire[i].x,trajectoire[i].y);
     end;
     
     canvas.polyline(traj);
    end;
     
    Function TGraphique.ptinfo(x,y:reel):Tpoint;
    begin
     result:=point(round(xo+x*Gx),round(yo-y*Gy));
    end;
     
    procedure Tgraphique.tracerepere(penw:integer;coulpen,clfond:Tcolor); //tracé des axes
    begin
     with canvas do begin
      pen.width:=penw;
      pen.color:=coulpen;
      brush.Color:=clfond;
      fillrect(rect(0,0,width,height));
      moveto(0,round(yo));
      lineto(width,round(yo));
      moveto(round(xo),0);
      lineto(round(xo),height);
     end;
    end;
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    var i:integer;
    begin
     position:=poscreencenter;
     clientwidth:=screen.height div 2;
     clientheight:=screen.Height div 2;
     
     setlength(courbe,101);
     for i:= -50 to 50 do courbe[i+50]:= pt(i/10,sin(2*pi*i/50)); //TABLEAU DE POINTS EN COORDS MATHEMATIQUES
    end;
     
    procedure TForm1.FormPaint(Sender: TObject);
    begin
     with graphique do
     begin
      tracerepere(2,0,clwhite);
      canvas.pen.width:=1;
      canvas.Pen.color:=clred;
      tracecourbe(courbe);
     end;
     
     canvas.Draw(0,0,graphique);
    end;
     
    procedure TForm1.FormResize(Sender: TObject);
    begin
      graphique:=TGraphique.Create(clientwidth,clientheight,-5,5,-1.2,1.2); //-5 ...+5  EN ABSCISSE  et -1.2.......1.2 EN ORDONNEE
      invalidate;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
     graphique.Free;
    end;
     
    end.
    à toi de graduer etc...

    a+

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 150
    Points
    3 150
    Par défaut
    @ Archimède :

    Bonjour,

    j'ai testé ton code (compilé sous D7 avec W7 64 bit) mais rien ne s'affiche à l'exécution : la fenêtre Form1 reste vide ? le tracecourbe du paint ne semble pas fonctionner ?

    A+

    Charly

  6. #6
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    @ Archimède :

    Bonjour,

    j'ai testé ton code (compilé sous D7 avec W7 64 bit) mais rien ne s'affiche à l'exécution : la fenêtre Form1 reste vide ? le tracecourbe du paint ne semble pas fonctionner ?

    A+

    Charly
    as-tu lié les événements dans l'inspecteur d'objet ?

    Il n'y a aucune raison pour que ça ne s'affiche pas...

    a+

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 374
    Points : 3 150
    Points
    3 150
    Par défaut
    Tu as raison - j'ai oublié de lier les évènements dans l'inspecteur d'objet

    merci

    Charly

  8. #8
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    Bonjour,

    @gillou026

    Il faudrait préciser votre problème.
    Vous voulez afficher la ligne brisée qui relie les points ou la courbe qui passe par ces points.
    Dans le premier cas c'est un problème d'affichage alors que dans le second c'est d'abord un pb mathématique.
    Pour l'affichage je dispose d'une Unit Courbaff.pas qui peut vous aider (à adapter).

    PL

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    J'ai eu des choses plus "prioritaires" à faire et du coup j'avais laissé tombé ...

    J'ai donc pas eu encore le temps de tester ...

    Mais pour répondre à une question, je veux juste faire du point à point ...

    Pour la courbe qui passe par tous les points, je me souviens avoir fait ça en Maitrise EEA.

    Déjà arriver à tracer du point à point sera bien ...

    Merci à tous de votre participation.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    Personnellement j'utilise le composant TeeChart qui est intégré à D7, n'est ce pas le cas pour D6 ?
    (sinon vous devriez pouvoir le trouver sur le site de l'éditeur Steema)
    Vous ajoutez votre Chart sur la Form, vous créez une TLineSeries et vous l'alimentez à partir de votre tableau de points.

  11. #11
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Polyline et Polybezier dans TCanvas.

    Sinon utiliser un composant type Plot, tel que PlotLab de Mitov (et pleins d'autres chose à découvrir sur son site). le tout gratuit.

  12. #12
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut Ellipse inclinée
    Bonjour,

    Avec CourbAff on peut tracer une ellipse dont un axe est incliné en modifiant la procédure TraceGraphxy :

    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
    procedure TFAffGraph.TraceGraphXY( Fx : TFoncX; ChY : string; Nb : integer);
    var                            //           chaine Y=F(X)  Nbre Series de points
      Pas : Txy;
      BPtdsEcran : boolean;       // faux si 1er point ou si point hors écran
     
      T :  double ;               // paramètre de calcul 
     
    procedure EllipseIncline(var X, Y : double; T:double);   
    var Xx, Yy : double;
    begin
        Xx := 100*cos(T);                       // calcul des coordonnées axe OX  A=100
        Yy :=  50*sin(T);                       //                            OY  B=50
        X := Xx*cos(Theta)-Yy*sin(Theta);      // changement de coordonnées
        Y := Xx*sin(Theta) + Yy*cos(Theta);    // rotation de Theta
    end;
     
    begin
        BPtdsEcran := false;
        Pas := (Xm-Xn)/2/A;
     
        T := 0;
        while T <= 2*(Pi+0.1) do     // pour boucler l'affichage
        begin
          EllipseIncline(X, Y, T);
     
          PtXY(X, Y);                   // calcul de la position du point en pixels
          if (Pt.Y >=0) and (Pt.Y<= B) then   // le point est il dans l'écran ?
            if BPtdsEcran then PBGraph.Canvas.LineTo(Pt.X, Pt.Y)
                          else begin
                                 PBGraph.Canvas.MoveTo(Pt.X, Pt.y);  // position 1er point
                                 BPtdsEcran := true;
                          end
            else BPtdsEcran := false;   // on sort de l'écran le prochain poin sera le 1er
          T :=T+pas;             
        end;
                                  // tracé de l'axe incliné de Theta Y = theta * X
        Y := tan(Theta)*Xmin;                   // 1er point de la droite
        PtXY(Xmin,Y);
        PBGraph.Canvas.MoveTo(Pt.X, Pt.y);      // on se déplace sur le 1er point
        X := Xmax;                              // dernier point
        Y :=  tan(Theta)*X;
        PtXY(X,Y);
        PBGraph.Canvas.LineTo(Pt.X, Pt.y);      // on trace l'axe incliné de theta
     
        ChY :=' Ellipse incliné';
        LaTitre.Caption := ' Graphe - Essai';
        LaffGr.Caption := ChY +'- Intervalle ('+FloatToStr(Xmin)+' .. '+FloatToStr(Xmax)+')';
     
        if Nb > 0 then TraceDonneesReg( Nb);       // affiche les points données
        TraceAxes(PXOrig,PYOrig);                  // traçage des axes
        GrAxes(Fx);                                // on les gradues
    end;
    Auparavant il faut définir Xmin = -100, Xmax = 100 et dans ParamFonct Yn = -100, Ym = 100

    (ne pas exécuter MinMax).
    Voici ce qu'on obtient pour Theta = PI/6 (30°).

    PL
    Images attachées Images attachées  

Discussions similaires

  1. tracer des courbes à partir des données Excel
    Par jeunehomme dans le forum MATLAB
    Réponses: 5
    Dernier message: 26/03/2015, 22h38
  2. Tracer des courbes à partir fichier fortran 90 avec gnuplot
    Par inesnoussa2211 dans le forum Fortran
    Réponses: 1
    Dernier message: 30/11/2014, 18h44
  3. Réponses: 5
    Dernier message: 29/09/2014, 23h08
  4. tracer une courbe à partir d'un tableau
    Par Antoineba dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 29/04/2010, 16h34
  5. tracer des courbes à partir d'un tableau de données
    Par Erlen dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 6
    Dernier message: 28/11/2008, 18h08

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