pascalabcnet/InstallerSamples/Applications/GraphApplications/FuncTransform.pas

51 lines
1,004 B
ObjectPascal

uses
GraphABC;
var
h := 0.01;
mx := 2.0;
my := 0.35;
dy := 0.0;
dx := 0.0;
f: real -> real := x -> x * sin(x);
const
boundx = 5;
boundy = 3;
function Transform(f: real -> real): real -> real;
begin
Result := x -> my * f(mx * (x + dx)) + dy;
end;
procedure DrawGraphic(f: real -> real);
begin
Draw(f, -boundx, boundx, -boundy, boundy);
Window.Title := Format('mx={0:f2} my={1:f2} dx={2:f2} dy={3:f2}', mx, my, dx, dy);
Redraw;
end;
procedure KeyDown(key: integer);
const
ArrowKeys: set of integer = [vk_Left, vk_Right, vk_Up, vk_Down, vk_Home, vk_End, vk_PageUp, vk_PageDown];
begin
var g := Transform(f);
case key of
vk_Left: my -= h;
vk_Right: my += h;
vk_Up: mx -= h;
vk_Down: mx += h;
vk_Home: dx += h;
vk_PageUp: dx -= h;
vk_PageDown: dy += h;
vk_End: dy -= h;
end;
if key in ArrowKeys then
DrawGraphic(g);
end;
begin
DrawGraphic(Transform(f));
LockDrawing;
OnKeyDown := KeyDown;
end.