51 lines
1,004 B
ObjectPascal
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. |