Echtzeit Graphen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Moo
Beiträge: 27
Registriert: Mi 21. Mai 2014, 19:11

Echtzeit Graphen

Beitrag von Moo »

Hallo liebes Forum!
Ich habe eine Frage.
Was muss ich schreiben um einen Graphen per ButtonClick an und ausschalten zu können? :D
Danke im Vorraus :)

Edit:
Ok nvm
ich denke ich kann das machen in dem ich einen Parameter im Graphen permanent erhöhe. Dadurch würde es ja reintheoretisch nach links wandern wenn ich den richtigen parameter nutze.
Ist das so möglich ?

Edit2:
Ich will also den Graphen auf der x-Achse verschieben.

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: Echtzeit Graphen

Beitrag von wp_xyz »

Leider enthält deine Frage wenig Konkretes: Wie zeichnest du den Graphen? Mit TAChart? Welche Daten sind dargestellt? Einzelne x/y Werte oder eine Funktion?

Moo
Beiträge: 27
Registriert: Mi 21. Mai 2014, 19:11

Re: Echtzeit Graphen

Beitrag von Moo »

Ich zeichne den Graphen mit TAChart und es sind Funktionen
Sorry hab mich noch nich so dran gewöhnt was ich alles angeben muss (:

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: Echtzeit Graphen

Beitrag von wp_xyz »

OK - damit kommen wir der Sache schon näher:

Eine Series schaltest du mit der Eigenschaft "Active" ein und aus. Wenn du z.B. dafür eine Checkbox auf dem Formular hast, könntest du folgenden Ereignis-Code verwenden:

Code: Alles auswählen

 
procedure TForm1.Checkbox1Click(Sender: TObject);
begin
  Chart1LineSeries1.Active := Checkbox1.Checked;
end;
 
Wegen der Verschiebung entlang der x-Achse würde ich noch gerne wissen, wie du die funktion berechnest und an den Chart übergibst? Nimmst du eine TFunctionSeries, bei der die Berechnung im OnCalculate-Ereignis erfolgt? Oder eine TLineSeries, bei der du einzelne Stützpunkte berechnest und mit AddXY einfügst?

Oder möchtest du eher wissen, wie man bei einer Zoom-Ansicht den sichtbaren Ausschnitt verschiebt? Das habe ich einmal in http://wiki.lazarus.freepascal.org/TACh ... e_easy_way zusammengeschrieben.

Moo
Beiträge: 27
Registriert: Mi 21. Mai 2014, 19:11

Re: Echtzeit Graphen

Beitrag von Moo »

Ich nehme eine TLineSeries und berechne die per Funktion

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: Echtzeit Graphen

Beitrag von wp_xyz »

Um die Kurve nach rechts zu verschieben, musst du den Verschiebungsbetrag von x abziehen, bevor du die Funktion berechnest. Für eine Verschiebung nach links wird der Verschiebungsbetrag addiert.

In dem folgenden kleinen Programm, bestehend aus Chart, LineSeries, einem Button "Verschiebe um -0,1" und einem Button "Verschiebe um +0.1", speichert die Variable "Gesamtverschiebung" den bisher aufgelaufenen Verschiebungsbetrag. Beim Klicken auf einen der beiden Buttons wird "CalcData" aufgerufen, wo zunächst die Gesamtverschiebung um 0.1 erhöht bzw. erniedrigt wird; dann wird die Funktion, hier ein einfacher Sinus, mit einem um die Gesamtverschiebung erniedrigten x neu berechnet.

Code: Alles auswählen

 
var
  GesamtVerschiebung: Double = 0.0;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  CalcData(0);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  CalcData(-0.1);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  CalcData(+0.1);
end;
 
procedure TForm1.CalcData(Verschiebung: Double);
const
  MIN = -10;
  MAX = 10;
  N = 100;
var
  i: Integer;
  x: Double;
  y: Double;
begin
  GesamtVerschiebung := GesamtVerschiebung + Verschiebung;
  Chart1LineSeries1.Clear;
  for i := 0 to N-1 do begin
    x := MIN + (MAX-MIN) * i / (N-1);
    y := sin(x-GesamtVerschiebung);  // hier eigene Funktion einsetzen
    Chart1LineSeries1.AddXY(x, y);
  end;
end;
 

Moo
Beiträge: 27
Registriert: Mi 21. Mai 2014, 19:11

Re: Echtzeit Graphen

Beitrag von Moo »

Danke hat mir sehr geholfen !!
*Like* :D

Antworten