Сдвиг и масштабирование графика функции
Привет! Пишу программу, которая рисует график функции "Цепная линия"
y:=10*((exp(x/2))+(exp(-x/2)))/2;
Прошу помочь вот по этим вопросам:
1) как сдвигать график па нажатию какой-либо клавиши (например, клавиша w - вверх на 15пикселей)?
2) как масштабировать график функции тоже по нажатию какой либо клавиши (например на 10º)?
3) Вместо "10", нужно где-то в Edit'е чтоб вводилось любое число.
Код программы:
PHP код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var xc,yc,w,h,i:integer;
mx,my,x,y:real;
begin
xc:=Image1.Width div 2;
yc:=Image1.Height div 2;
w:=xc*2;
h:=yc*2;
mx:=(w-200)/100;
my:=(h-200)/100;
with Image1.Canvas do
begin
Brush.Color:=clWhite;
Pen.Color:=clGreen;
MoveTo(0,yc);//линии осей
LineTo(w,yc);
MoveTo(xc,0);
LineTo(xc,h);
textout(w-20,yc-25,'x');//подпись концов
textout(xc+5,5,'y');
textout(xc+5,yc+5,'0');
for i:=1 to 50 do
begin
MoveTo(xc+round(i*mx*10),yc-2); LineTo(xc+round(i*mx*10),yc+2);//засечки на оси Х, от 0 до +x
MoveTo(xc-round(i*mx*10),yc-2); LineTo(xc-round(i*mx*10),yc+2);// от -x до 0
textout(xc+round(i*mx*10),yc+10,Inttostr(10*i));//подписи
textout(xc-round(i*mx*10),yc+10,Inttostr(-10*i));
MoveTo(xc+2,yc-round(i*my*10)); LineTo(xc-2,yc-round(i*my*10));//засечки по У, от 0 до +y
MoveTo(xc+2,yc+round(i*my*10)); LineTo(xc-2,yc+round(i*my*10));// от -y до 0
textout(xc-15,yc-round(i*my*10),Inttostr(10*i));//подписи
textout(xc-15,yc+round(i*my*10),Inttostr(-10*i));
end;
x:=-30;
while x<=30 do
begin
y:=10*((exp(x/2))+(exp(-x/2)))/2;
pixels[xc+round(x*mx),yc-round(y*my)]:=clred;
x:=x+0.0013;
end;
end;
end;
end.
|