График функции
Листинг 10.5. График функции
 unit grfunc_;
 interface
Windows, Messages, SysUtils, Classes,
 Graphics, Controls, Forms, Dialogs;
 type
 TForm1 = class(TForm)
 procedure FormPaint(Sender: TObject);
 procedure FormResize(Sender: TObject);
 private
{ Private declarations }
public
 
{Public declarations }
end;
 var
 Forml: TForml;
 implementation
 {$R *.DFM}
// Функция, график которой надо построить
Function f(x:real):real;
 begin
f:=2*Sin(x)*exp(x/5) ;
 end;
 // строит график функции
 procedure GrOfFunc;
 var
x1,x2:real; // границы изменения аргумента функции
y1,y2:real; // границы изменения значения функции
х:real; // аргумент функции
у:real; // значение функции в точке х
dx:real; // приращение аргумента
l,b:integer; // левый нижний угол области вывода графика
w,h:integer; // ширина и высота области вывода графика
mx,my:real; // масштаб по осям X и Y
х0,у0:integer; // точка — начало координат
 begin
 // область вывода графика
 l:=10; // X — координата левого верхнего угла
b:=Forml.ClientHeight-20;
 //У — координата левого верхнего угла
 h:=Forml.ClientHeight-40; // высота
 w:=Forml.Width-40; // ширина
 x1:=0; // нижняя граница диапазона аргумента
х2:=25; // верхняя граница диапазона аргумента
dx:=0.01; // шаг аргумента
 // найдем максимальное и минимальное значения
 // функции на отрезке [x1,x2]
 y1:=f(xl);
 // минимум
 y2:=f(xl);
 //максимум
 x:=x1;
 repeat
 У := f (х);
 if у < yl then yl:=y;
 if у > 
 у2 then y2:=y;
 х:=x+dx; until (x > 
= х2);
 // вычислим масштаб
 my:=h/abs(y2-yl);
 // масштаб по оси Y
 mx:=w/abs(x2-xl);
 // масштаб по оси X
 х0:=1;
 у0:=b-Abs(Round(y1*my)) ;
 with form1.Canvas do
 begin
 // оси
 MoveTo(l,b);
LineTo(l,b-h);
 MoveTo(x0,y0);
LineTo(x0+w,y0);
 TextOut(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3));
 TextOut(l+5,b,FloatToStrF(yl,ffGeneral,6,3));
 // построение графика
 x:=xl; repeat
 y:=f(x);
Pixels[x0+Round(x*mx),y0-Round(y*my)]:=clRed;
 x:=x+dx;
 until (x > 
= x2);
end;
 end;
 procedure TForm1.FormPaint(Sender: TObject);
 
begin
 GrOfFunc; end;
// изменился размер окна программы
procedure TForm1.FormResize(Sender: TObject);
 
begin
 // очистить форму
forml.Canvas.FillRect(Rect(0,0,ClientWidth,
ClientHeight));
 // построить график
GrOfFunc;
end;
 end.
 Основную работу выполняет процедура GrOfFunc, которая сначала вычисляет максимальное (у2) и минимальное (yl) значения функции на отрезке [x1l,x2]. Затем, используя информацию о ширине (Forml.Clientwidth -40) и высоте (Form1.ClientHeight - 40) области вывода графика, вычисляет масштаб по осям X (mх) иY(mу).
 Высота и ширина области вывода графика определяется размерами рабочей (клиентской) области формы, т. е. без учета области заголовка и границ. После вычисления масштаба процедура вычисляет координату у горизонтальной оси (уо) и вычерчивает координатные оси графика. Затем выполняется непосредственное построение графика (Рисунок 10.10).
 Вызов процедуры GrOfFunc выполняют процедуры обработки событий onPaint и onFormResize. Процедура TForm1. FormPaint обеспечивает вычерчивание графика после появления формы на экране в результате запуска программы, а также после появления формы во время работы программы, например, в результате удаления или перемещения других окон, полностью или частично перекрывающих окно программы. Процедура TForm1.FormResize обеспечивает вычерчивание графика после изменения размера формы.
