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;