Малюємо графік функції однієї змінної в середовищі програмування delphi

Графік функції доцільно зображувати у вигляді ламаної лінії, яка з’єднує точки, що лежать на графіку. Для того, щоб така кусковолінійна апроксимація давала хороший результат, необхідно, щоб відстань між точками ламаної лінії була достатньо малою.

Для побудови графіка по заданому аналітичному опису функції необхідно обчислити масив значень аргументу і масив відповідних значень функції. Крок зміни аргументу залежить від кількості точок на які розбивають діапазон зміни аргументу і обчислюється за наступною формулою:

Побудова графіка функції

де Побудова графіка функції – крок зміни аргумента; Побудова графіка функції – максимальне значення аргумента; Побудова графіка функції – мінімальне значення аргумента; Побудова графіка функції – задана кількість точок графіка.

Наступним кроком алгоритму побудови графіка є обчислення масиву значень функції Побудова графіка функції, та визначення його мінімального і максимального значення. Дані виличини необхідні для проведення масштабування.

Далі, для малювання графіка на канві вибирають прямокутну область, яка визначається координатами лівого верхнього кута Побудова графіка функції і правого нижнього кута Побудова графіка функції. Задавши дану область визначаємо масштаб по осі Побудова графіка функції та Побудова графіка функції.

Побудова графіка функції

Після цього, переходимо до визначення точки центру системи координат. Дані величини обчислюємо за наступними формулами:

Побудова графіка функції

де Побудова графіка функції – заокруглення до найближчого цілого числа.

Побудова графіка функції
Графічне представлення алгоритму побудови графіка функції

На наступному кроці необхідно визначити координати точок графіка, виражені в екранних координатах, з урахуванням розмірів обраного поля виведення графіка. Значення аргументу в екранних координатах визначається за формулою:

Побудова графіка функції

де Побудова графіка функції – значення аргументу в Побудова графіка функції-й точці, виражене в екранних координатах; Побудова графіка функції – значення аргументу в Побудова графіка функції-й точці; Побудова графіка функції – масштаб по осі Побудова графіка функції; Побудова графіка функції – заокруглення до найближчого цілого числа.

Значення функції в екранних координатах визначається за формулою:

Побудова графіка функції

де Побудова графіка функції – значення функції в Побудова графіка функції-й точці, виражене в екранних координатах; Побудова графіка функції – значення функції в Побудова графіка функції-й точці;  Побудова графіка функції – масштаб по осі Побудова графіка функціїПобудова графіка функції – заокруглення до найближчого цілого числа.

На основі отриманих координат точок кривої графіка та центру системи координат, здійснюють побудову осей системи координат та самого графіка шляхом з’єднання точок кривої відрізками прямих.

Отже, давайте створимо новий delphi-проект і спробуємо з допомогою даного алгоритму на канві форми побудувати графік деякої функції. Для цього нам буде потрібно форма, на яку помістимо один компонент TButton та один компонент TLabel.

Інтерфейс delphi-проекту "Побудова графіка функції"
Інтерфейс delphi-проекту “Побудова графіка функції”

Тепер перейдемо до самого коду. Головною подією буде натискання на кнопку “Побудувати графік“. Двічі клацнувши на неї, перейдемо в редактор коду і в тілі процедури OnClick компонента Button1 задамо кількість точок графіка та визначемо крок зміни аргументу.

procedure TForm1.Button1Click(Sender: TObject);
var
i, x0, y0, n, k: integer;
xx, h, xmin, ymin, xmax, ymax, mx, my: real;
X, Y: array [1..1000] of real;
begin
xmin := -3; // Мінімальне значення аргументу
xmax := 3; // Максимальне значення аргументу
n := 100; // Кількість точок графіка
h := (xmax – xmin)/n; // Крок зміни аргументу

Далі будуємо масив значень аргументу та масив значень функції, після чого, використовуючи функцію Extreme, визначаємо максимальне і мінімальне значення функції:

i := 0;
xx := xmin;
while (xx <= xmax) do
begin
i := i + 1;
X[i] := xx; // Значення аргументу в i-й точці
Y[i] := Sin(xx); // Значення функції в i-й точці
xx := xx + h;
end;
ymin := Extreme(Y, n, 0); // Мінімальне значення функції
ymax := Extreme(Y, n, 1); // Максимальне значення функції

На наступному кроці на канві форми визначемо прямокутну область, яка буде слугувати контейнером для побудови графіка функції і встановимо для неї білий колір заливки. Для того, щоб намалювати прямокутник на канві форми, скористаємось методом Rectangle класу TCanvas, який містить чотири параметри цілого типу, перших два вказують на координати лівого верхнього кута, наступні два – координати правого нижнього кута:

Form1.Canvas.Brush.Color := clWhite;
Form1.Canvas.Rectangle(10, 20, 510, 320);

Після цього, скориставшись формулами (2) і (3) визначаємо масштаб по осі Побудова графіка функції та Побудова графіка функції та координати точки центру системи координат:

mx := (510 – 10)/abs(xmax – xmin); // Масштаб по осі X
my := (320 – 20)/abs(ymax – ymin); // Масштаб по осі Y
{ Цент системи координат }
x0 := 10 + Trunc(mx * abs(xmin));
y0 := 20 + Trunc(my * abs(ymax));

На останньому кроці, скориставшись методами MoveTo і LineTo того ж класу TCanvas з використанням формул (4) і (5), маліємо осі системи координат та здійснюємо побудову графіка функції:

{ Маліємо вісь X }
Form1.Canvas.MoveTo(10, y0);
Form1.Canvas.LineTo(10 + 500, y0);
{ Маліємо вісь Y }
Form1.Canvas.MoveTo(x0, 20);
Form1.Canvas.LineTo(x0, 20 + 300);
{ Для побудови графіка вибираємо червоний колір }
Form1.Canvas.Pen.Color := clRed;
{ Маліємо графік функції }
for i := 1 to n-1 do
begin
Form1.Canvas.MoveTo(Trunc(x0 + X[i]*mx), Trunc(y0 – Y[i]*my));
Form1.Canvas.LineTo(Trunc(x0 + X[i + 1]*mx), Trunc(y0 – Y[i + 1]*my));
end;
end;

В принципі програма готова, залишається лише описати функцуію Extreme (призначена для відшукання максимального (мінімального) значення в масиві), після чого можна переходити до провірки працездатність отриманого delphi-проекту.

function TForm1.Extreme(V: array of real; n: integer; Param: integer): real;
var
i: integer;
ext: real;
begin
case Param of
{ Якщо значення парамента Param рівне 1 – знаходимо максимальне значення в масиві }
1 :
begin
ext := V[1];
for i := 1 to n do
if (ext < V[i]) then
ext := V[i];
end;
{ Якщо значення парамента Param рівне 0 – знаходимо мінімальне значення в масиві }
0 :
begin
ext := V[1];
for i := 1 to n do
if (ext > V[i]) then
ext := V[i];
end;
end;
Extreme := ext;
end;
grafik_fukcii391
Побудова графіка функції в середовищі програмування delphi

Скачати delphi-проект “Побудова графіка функції“.

Залишити коментар

Your email address will not be published. Required fields are marked *

*