function f(x: real): real;
begin
Result:=10*Sin(x/2);
end;
procedure TForm1.Button1Click(Sender: TObject);
const k=18.5; // коэффициент масштабирования
var i, x0, y0, xi, yi: integer;
x, y: real;
begin
With Image1.Canvas do
begin
{ очистка поля }
Pen.Color:=clWhite;
Brush.Color:=Pen.Color;
Rectangle(0, 0, Image1.Width, Image1.Height);
{ начало координат (центр поля) }
x0:=Image1.Width div 2;
y0:=Image1.Height div 2;
{ рисование координат }
Pen.Color:=clBlack;
MoveTo(0, y0);
LineTo(Image1.Width, y0);
MoveTo(x0, 0);
LineTo(x0, Image1.Height);
{ рисование стрелок }
MoveTo(Image1.Width-10, y0-5);
LineTo(Image1.Width, y0);
LineTo(Image1.Width-11, y0+6);
MoveTo(x0-5, 10);
LineTo(x0, 0);
LineTo(x0+6, 11);
{ нанесение делений на осях }
For i:=-Round(x0/k) to Round((x0-20)/k) do // 20 - на стрелках не наносить
begin
xi:=x0+Round(i*k);
If i<>0 then
TextOut(xi-5, y0+5, IntToStr(i));
MoveTo(xi, y0-3);
LineTo(xi, y0+4);
end;
For i:=-Round(y0/k) to Round((y0-20)/k) do
begin
yi:=y0-Round(i*k);
If i<>0 then
TextOut(x0+5, yi-7, IntToStr(i));
MoveTo(x0-3, yi);
LineTo(x0+4, yi);
end;
{ рисование самой функции }
Pen.Color:=clRed;
y:=f(-x0/k);
yi:=y0-Round(y*k);
MoveTo(0, yi);
For i:=0 to Image1.Width do
begin
x:=(i-x0)/k;
y:=f(x);
xi:=x0+Round(x*k);
yi:=y0-Round(y*k);
LineTo(xi, yi);
end;
end;
end;
Результат рисования графика функции на Image1 выглядит следующим образом:
|