Partage
  • Partager sur Facebook
  • Partager sur Twitter

ZedGraph: tracer une courbe sinusoïdale

    16 juin 2011 à 13:16:56

    je suis débutant en .net et c'est mon premier essai en C#.
    Ce code permet de tracer 2 courbes en temps réel, ces 2 courbes sont linéaires.
    SVP, qui peut m'aider a obtenir comme résultat 2 courbes sinusoïdales.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    using System.Drawing;
    using ZedGraph;
     
    namespace zedGraph
    {
     
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
     
            int TickStart, intMode = 1;
            private void Form1_Load(Object sender, EventArgs e)
            {
                GraphPane myPane = zed.GraphPane;
                myPane.Title.Text = "Motor Position";
                myPane.XAxis.Title.Text = "Time , Seconds";
                myPane.YAxis.Title.Text = "Angle , Deg";
     
                RollingPointPairList list = new RollingPointPairList(60000);
                RollingPointPairList list1 = new RollingPointPairList(60000);
     
     
                LineItem curve = myPane.AddCurve("Set Value", list, Color.Red, SymbolType.None);
                LineItem curve1 = myPane.AddCurve("Current Value", list1, Color.Blue, SymbolType.None);
     
                myPane.XAxis.Scale.Min = 0;
                myPane.XAxis.Scale.Max = 30;
                myPane.XAxis.Scale.MinorStep = 1;
                myPane.XAxis.Scale.MajorStep = 5;
     
     
                zed.AxisChange();
     
                TickStart = Environment.TickCount;
     
            }
     
     
            private void PbMode_Click(object sender, EventArgs e)
            {
     
                if (PbMode.Text == "SROLL")
                {
                    intMode = 1;
                    PbMode.Text = "COMPACT";
                }
     
                else
                {
                    intMode = 0;
                    PbMode.Text = "SROLL";
                }
            }
     
     
            private void Draw(String setPoint, String current)
            {
                double intsetpoint;
                double intcurrent;
                double.TryParse(setPoint, out intsetpoint);
                double.TryParse(current, out intcurrent);
     
                if (zed.GraphPane.CurveList.Count <= 0)
                    return;
                LineItem curve = zed.GraphPane.CurveList[0] as LineItem;
                LineItem curve1 = zed.GraphPane.CurveList[1] as LineItem;
     
                if (curve == null)
                    return;
                if (curve1 == null)
                    return;
     
                IPointListEdit list = curve.Points as IPointListEdit;
                IPointListEdit list1 = curve1.Points as IPointListEdit;
     
                if (list == null)
                    return;
                if (list1 == null)
                    return;
     
                double time = (Environment.TickCount - TickStart) / 1000;
     
                list.Add(time, intsetpoint);
                list1.Add(time, intcurrent);
     
                Scale xScale = zed.GraphPane.XAxis.Scale;
                if (time > xScale.Max - xScale.MajorStep)
                {
                    if (intMode == 1)
                    {
                        xScale.Max = time + xScale.MajorStep;
                        xScale.Min = xScale.Max - 30.0;
                    }
     
                    else
                    {
                        xScale.Max = time + xScale.MajorStep;
                        xScale.Min = 0;
                    }
     
                }
     
     
                zed.AxisChange();
                zed.Invalidate();
     
            }
     
            private void PbExit_Click(Object sender, EventArgs e)
            {
                Close();
            }
     
            private void timer1_Tick(Object sender, EventArgs e)
            {
                Draw("100", "200");
            }
     
     
        }
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2011 à 13:59:52

      Bonjour,

      Si c'est vraiment ton premier essai en C#, je te conseillerais de commencer par les bases et de progresser petit à petit, plutôt que d'utiliser directement une librairie graphique dont tu ne comprends pas ou peu le code.

      Toutefois, je ne connais pas spécifiquement cette librairie, mais en utilisant une fonction mathématique, tu ne pourrais pas faire ça ?
      Par exemple :

      List<double> pointsX = new List<double>();
      List<double> pointsY = new List<double>();
      for (int i = 0 ; i <= 20 ; i++)
      {
         pointsX.Add((double)i);
         pointsY.Add(Math.Sin((double)i));
      }
      


      Ainsi, tu auras deux listes contenant les abscisses (pointsX) et les ordonnées (pointY) des points de la fonction y=sin(x) entre 0 et 20. Il ne restera plus qu'à la dessiner grâce à la librairie, mais je peux pas t'aider pour ça.

      Et pense bien à utiliser la librairie System.Collections.Generic avant d'utiliser les List.
      using System.Collections.Generic;

      P.S : En fouillant un peu sur le Net, j'ai trouvé cette documentation en pdf, ça pourrait t'être utile : Utilisation de la librairie graphique ZedGraph (pdf)
      • Partager sur Facebook
      • Partager sur Twitter

      ZedGraph: tracer une courbe sinusoïdale

      × 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