Thema: Delphi Funktionsplotter

Einzelnen Beitrag anzeigen

Benutzerbild von furby
furby

Registriert seit: 15. Sep 2005
Ort: Braunschweig
37 Beiträge
 
Turbo Delphi für Win32
 
#1

Funktionsplotter

  Alt 24. Sep 2006, 14:49
Hallo alle zusammen...
Ich bin gerade dabei einen ziemlich umfangreichen funktionsplotter zu schreiben. Dafür habe ich jetzt einen Matheparser programmiert, der auch schon ziemlich gut funktioniert. Das Zeichnen von Funktionen geht auch wunderbar. Jedoch dauert mir das alles viel zu lange, da ich wenn ich zu einem x wert den y wert ausrechne, jedesmal wieder meine funktion (ein string) parse... Jetzt wollte ich fragen ob und wie ich das vielleicht anders machen könnte um das plotten von Funktionen zu optimieren. Denn eigentlich müsste es doch reichen den string nur 1 mal zu parsen. Ich habe nämlich schon viele plotter gesehen, die viel schneller zeichnen als meiner. Und an meinem Parser liegt die Geschwindigkeit nicht, da dieser eigentlich im Vergleich sehr schnell ist. Mein Plotter ist ürbigens im Anhang angehängt, damit man sich vielleicht mal ein Bild machen kann.

Hier aber erstmal meine Prozedur.

Delphi-Quellcode:
procedure ZeichneGraph(s:string;image:TImage);
const
  dx = 0.001;
var
  x,y : real;

  function f(x : real) : extended;
  begin
    result := ParsestringX(s, x); // Hier kommt mein parser zum Einsatz
  end;

begin
  if functions[arraycount - 1].visible then
  begin
    x := xmin;
    y := f(x);
    image.canvas.MoveTo(ut(x),vt(y));
    while x < xmax do
    begin
      y := f(x);
      if (y < ymax) and (y > ymin) and (not error.boo) then // Wenn der Wert darstellbar und kein Fehler
                                                            // z.b. 1/x u. x = 0
      begin
        image.canvas.Pen.color := functions[arraycount-1].farbe;
        image.canvas.LineTo(ut(x),vt(y));
        x := x+dx;
      end
      else
      begin
        x := x +dx;
        y := f(x);
        image.canvas.MoveTo(ut(x),vt(y));
      end;
    end;
  end;
end;
Angehängte Dateien
Dateityp: exe fabiansplotter_168.exe (540,5 KB, 49x aufgerufen)
Fabian K
  Mit Zitat antworten Zitat