Eine Funktion sieht ja immer so aus
Also brauchst du etwas, dass dir dieses
f(x) abbildet.
Delphi-Quellcode:
type
TPlotFunction = class
public
function Name : string; virtual;
function f( x : double ) : double; virtual;
end;
und du könntest dir dann solch eine Prozedur bauen
Delphi-Quellcode:
procedure Plot( ACanvas : TCanvas; AFunction : TPlotFunction );
var
i, j : Integer;
x, y : Double;
begin
i := 220;
while i < 420 do
begin
Inc (i);
x := (i - 220) / 50;
y := AFunction.f(x);
j := Round (220 - y * 50);
ACanvas.Pixels [i, j] := clTeal
end;
ACanvas.Font.Color := clTeal;
ACanvas.TextOut (340, 405, AFunction.Name );
end;
Eine konkrete Funktion ist ja diese Ln(x)
Delphi-Quellcode:
type
TLN_PlotFunction = class( TPlotFunction )
public
function Name : string; override;
function f( x : double ) : double;
end;
function TLN_PlotFunction.Name : string; override;
begin
Result := 'y = ln(x)';
end;
function TLN_PlotFunction.f( x : double ) : double;
begin
Result := ln(x);
end;
Deine ButtonClick-Methode würde dann so aussehen
Delphi-Quellcode:
procedure TForm7.Button1Click(Sender: TObject);
var
LFunction : TLN_PlotFunction;
begin
LFunction := TLN_PlotFunction.Create;
try
Plot( Image1.Canvas, LFunction );
finally
LFunction.Free;
end;
end;
Und das mit der
y = Log(a)x Funktion geht dann so
Delphi-Quellcode:
type
TLOGA_PlotFunction = class( TPlotFunction )
private
Fa : Integer;
public
property a : Integer read Fa write Fa;
function Name : string; override;
function f( x : double ) : double;
end;
function TLOGA_PlotFunction.Name : string; override;
begin
Result := Format( 'y = log(%d)x',[a] );
end;
function TLN_PlotFunction.f( x : double ) : double;
begin
Result := log(a)*x;
end;
und angewendet dann so
Delphi-Quellcode:
procedure TForm7.Button1Click(Sender: TObject);
var
LFunction : TLOGA_PlotFunction;
begin
LFunction := TLOGA_PlotFunction.Create;
try
LFunction.a := 3; // für f(x) = log(3)*x
Plot( Image1.Canvas, LFunction );
finally
LFunction.Free;
end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)