Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Программа построения графика функций ⇐ ПредыдущаяСтр 2 из 2
В представленной ниже программе на экран выводится график функции с использованием свойства Pixels. В этой программе для построения графика используется вся доступная область формы, причем программа написана таким образом, что при изменении размеров окна график выводится заново с учетом новых размеров.. Этапы создания программы: 1. Основную работу выполняет процедура GrOfFunc, которая сначала вычисляет максимальное (г/2) и минимальное (г/1) значения функции на отрезке [xl, x2], a затем, используя информацию о ширине и высоте области вывода графика, вычисляет масштаб по осям х (тх) и у (ту). Эту процедуру необходимо поместить в программный модуль в раздел implementation (раздел описания (текста) процедур и функций модуля). Для этого нужно открыть окно редактора кодов и в указанный раздел после директивы {$R *.DFM} поместить следующий текст процедуры (в данном примере рассматривается функция f(x) = 2sin x • еx/5 на интервале [0; 25]): procedure GrOfFunc; { построение графика функции } var x1, х2: real; { границы изменения-, аргумента функции } y1, у2: real; { границы изменения значения функции } х: real; { аргумент функции } у: real; { значение функции в точке х } dx: real; { приращение аргумента } l, Ь: integer; { левый нижний угол области вывода графика } w, h: integer; { ширина и высота области вывода графика } mx, my: real; { масштаб по осям X и Y } хО, уО: integer; { точка начала координат } function f (x: real): real; begin f: =2*sin(x)*exp(x/5); end; begin { область вывода графика } l: =10; { х-координата левого нижнего угла } b: =Forml.ClientHeight-20; { у-координата левого нижнего угла } h: =Forml.ClientHeight-40; { высота } w: =Forml.ClientWidth-40; { ширина } x1: =0;. { нижняя граница диапазона аргумента } х2: =25; { верхняя граница диапазона аргумента } dx: =0.01; { шаг аргумента } { поиск минимума и максимума функции на отрезке [xl, x2] } y1: =f(xl); y2: =f (x2); x: =x1; repeat y: =f(x); if y< y1 then y1: =y; if y> y2 then y2: =y; x: =x+dx; until (x> =x2); my: =h/abs(y2-y1); { масштаб по оси X} mx: =w/abs(x2-x1); { масштаб по оси Y} хО: =1; yO: =b-abs(Round(y1*my)); with form1.Canvas do begin MoveTo(l, b); LineTo(l, b-h); MoveTo(xO, yO); LineTo(xO+w, у0); TextOut(l+5, b-h, FloatToStrF(y2, ffGeneral, 6, 3)); TextOut(l+5, b, FloatToStrF(yl, ffGeneral, 6, 3)); {построение графика} x: =x1; repeat y: =f(x); Forml.Canvas.Pixels[xO+Round(x*mx), yO-Round(y*my)]: =clRed; x: =x+dx; until (x> =x2); end; end; 2. Вызов процедуры GrOfFunc будет выполнять процедура TForml.FormPain обработки события OnPaint. Эта процедура обеспечит вычерчивание графика после появления формы на экране в результате запуска программы. Для вызова процедуры следует щелчком выделить форму, в окне инспектора объектов выбрать вкладку Events и дважды щелкнуть в поле события OnPaint. Затем в позиции курсора ввести текст процедуры GrOfFunc. 3. Для вычерчивания графика после изменения размера формы используется процедура TForml.FormResize. Она обрабатывает событие OnFormResize, которое происходит при изменении размера формы. Данная процедура сначала должна очистить поверхность формы, а затем вызвать процедуру GrOfFunc для построения графика в соответствии с новыми размерами. Для вызова процедуры TForml.FormResize следует щелчком выделить форму, в окне инспектора объектов выбрать вкладку Events и дважды щелкнуть в поле события OnFormResize. Затем в позиции курсора ввести текст процедуры следующим образом:
with forml do Canvas.FillRect(Rect(0, 0, ClientWidth, ClientHeight)); GrOfFunc; end; В результате программный модуль будет иметь следующий вид: unit graf_f; interface uses 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 Form1: TForm1; implementation {$R *.DFM} procedure GrOfFunc; { построение графика функции } ... здесь размещается текст процедуры end; procedure TForml.FormPaint(Sender: TObject}; begin GrOfFunc; end; procedure TForml.FormResize(Sender: TObject); begin { очистить форму } with forml do Canvas.FillRect(Rect(0, 0, ClientWidth, ClientHeight)); GrOfFunc; end; end. Результаты работы программы представлены на рисунке справа.
|