Partage
  • Partager sur Facebook
  • Partager sur Twitter

[ C# ] Tracer une courbe (MS)

    3 mai 2011 à 9:08:47

    Bonjour à tous et à toutes :-)

    J'ai une question de type graphique XY : j'utilise Measurement Studio, et je désire construire un graphe classique XY. Mon programme calcule des valeurs à chaque Tick d'un timer, et j'aimerais qu'il place un nouveau point à chaque tick du timer avec en abscisses le temps écoulé (logique pour le moment).

    Le soucis, c'est que je trouve aucune source ou exemple simple de graphe. Les exemples NI sont un peu complexes et je débute dans le domaine. Donc voici mes questions :

    - Faut-il placer les valeurs dans un tableau ?

    - Si oui, deux tableaux à une dimension du type : dataX[] et dataY[] ou bien un tableau à deux dimensions avec dataXY[][] ?

    - Si non, comment faut-il procéder pour ordonner les données à placer dans le graphe ?

    - Quels sont les lignes de commande permettant de créer un nouveau point (mettre à jour le graphe), associé telle variable à X et telle variable à Y, éventuellement tracer une courbe entre les deux points ?

    - Pour simplifier les réponses, si vous avez une source du genre, avec un graphe simple, parfois les lignes de codes éclairent davantage, et c'est plus rapide :-)

    Merci d'avance pour vos réponses.

    Excellente journée à tous les lecteurs du SdZ \o/

    Brygoth
    • Partager sur Facebook
    • Partager sur Twitter
      3 mai 2011 à 9:14:37

      Bonjour, je te conseille de déclarer une structure genre ça :
      struct Point
      {
          int X;
          int Y;
      }//etc
      


      Ensuite tu déclarera soit une nouvelle variable (si tu n'as pas besoin de stocker) de cette struct, soit tu commence par déclarer un tableau et tu rajoutes une case à chaque fois.
      Pour accéder ensuite, il suffira de faire quelque chose comme :
      Ord = myPoint[n].X;
      Abs = myPoint[n].Y;
      
      • Partager sur Facebook
      • Partager sur Twitter
        3 mai 2011 à 9:33:38

        C'est une bonne stratégie d'utiliser la structure oui.

        Quelle est la commande pour associer mon point au graphe ? Parce que j'ai regardé un peu, j'aurais envie d'utiliser myGraph.PlotXY(dataX,dataY); mais c'est pas tellement efficace ^_^ .

        Merci pour ta réponse.
        • Partager sur Facebook
        • Partager sur Twitter
          3 mai 2011 à 9:50:09

          Dans l'idée des tableaux je sais faire, mais je fais su C# depuis 3 semaines là, donc je suis pas encore bien à l'aise avec toutes les lib du langage :p
          Rien ne pourra mieux t'aider pour ça que le bon vieux google avec : "C# + associer point et graphe + msdn" (le msdn est en option !!)
          • Partager sur Facebook
          • Partager sur Twitter
            3 mai 2011 à 10:32:13

            J'ai déjà fais pas mal de recherche, mais il n'y a pas beaucoup d'infos sur cette bibliothèque, et les exemples offerts avec le logiciel sont un peu complexes ... ^_^ En fait avec "myGraph.PlotX(dataX);" et pareil pour "myGraph.PlotY(dataY);", l'échelle du graphe est modifiée pendant l'acquisition des données, donc je pense qu'elles sont bien positionnées dans le graphe, mais à l'écran je ne vois rien, même pas les points. Il doit me manquer une méthode qui affiche le graphe ou quelque chose comme ça.

            Si quelqu'un a des infos, je suis preneur :D

            Merci.
            • Partager sur Facebook
            • Partager sur Twitter
              3 mai 2011 à 11:41:14

              Il y a déjà une structure Point dans la bibliothèque de classes: System.Drawing.Point ;)

              Par contre je n'ai pas l'impression qu'il existe des outils standards pour tracer des graphes en WinForms... La plupart des outils que je connais sont payants :(
              @Brygoth: quelle est le type de myGraph ? :o
              • Partager sur Facebook
              • Partager sur Twitter
                3 mai 2011 à 11:50:00

                Le graph est un WaveFormGraph (outil de measurement studio). Il y a plusieurs type de graphe :

                - WaveFormGraph
                - ScatterGraph
                - DigitalWaveFormGraph
                - ComplexGraph

                Après, le choix du graphe ne m'importe peu, si un autre outil fonctionne plus facilement, je prends :p

                Edit :

                J'ai réussi à construire une courbe en utilisant des tableaux :

                double[] dataXArray = new double [n];

                et dans le timer : dataXArray[timerCount] = dataX;

                Ensuite pour afficher : myGraph.PlotX(dataXArray);

                Le soucis, c'est que l'échelle des abscisses se positionne à la valeur max "n" dès le début, et la partie de fin du tableau dataXArray est à 0, donc la courbe est aussi affichée et est à 0. De plus, si le nombre de tour du timer dépasse la valeur "n", ça risque de poser problème car le programme va vouloir inscrire des données hors des dimensions du tableau. J'aimerai donc ne pas afficher la partie droite de la courbe (qui est confondu avec l'axe des abscisses à Y=0), et que la limite des abscisses soit adaptée à la valeur actuelle des X. En gros, il faudrait créer un tableau "dynamique", avec comme dimension le compteur de mon timer, mais visual studio n'est pas tellement d'accord avec moi ^_^ Il doit y avoir une autre solution, si vous avez une petite idée :)

                J'espère avoir été clair, c'était pas évident à expliquer avec mon vocabulaire de débutant :p

                Merci :D
                • Partager sur Facebook
                • Partager sur Twitter

                [ C# ] Tracer une courbe (MS)

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown