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");
}
}
}
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. usingSystem.Collections.Generic;
× 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.