Попередня
Зміст
Наступна
Тема 17. Використання графiчного режиму.
Теорія

 

    Задача 17.2. Напишемо програму побудови графiка функцiї x є[-2;1]. Графiк займатиме весь екран.

    Розглянемо задачу побудови графіка обмеженої явно заданої функції y=f(x) на відрізку [a, b]. Ставиться завдання побудувати графік функції в прямокутній області екрану, лівий верхній кут якої має координати (x0, y0), довжини сторін прямокутника рівні lx(по горизонталі) і ly (по вертикалі) (рис1).


    Рис. 1. Побудова графіка.

    Нехай max і min - відповідно найбільше і найменше значення функцій y=f(x) на відрізку [a, b]. Ці значення можна знайти наближено, табулюючи функцію f на відрізку [a, b] з деяким кроком h. Позначимо через x1, y1 координати точок екрану, які потрібно відобразити. Реально координата x змінюється від a до b, y-від min до max, а на екрані x1 повинно змінюватись від x0 до x0+lx, y1-від y0 до y0=ly. Крім того, напрями осей Oy і Oy1 протилежні. Наведемо формули, які дозволяють перейти від координат (x, y) до координат екрану (x1, y1).

    Алгоритм, який реалізує побудову графіка, власне, повинен складатися з двох частин: 1) знаходження maх i min заданої функції; 2) обчислення координат (x1, x2) точок екрану які відповідають значенню аргументу х функції f.

    Напишемо програму побудови графіка функції x є[-2;1]. графік займатиме весь екран.

    ******************************************************************
    Задача 17.2.1. Для PascalABC дана програма має вигляда- ти так. ******************************************************************
    program gratik;
    uses graphABC, crt;
    const x0=2; y0=2; a=-2; b=1;lx=635; ly=395; h=0.001;
    var x1,y1:integer; x,max,min:real;
    function f(x:real):real;
    begin
        f:=x*sin(sqr(x))*exp(x);
    end;
    begin
       x:=a;
       max:=f(a);
       min:=f(a);
     while x<=b do
     begin
     if f(x) > max then max:=f(x);
     if f(x) < min then min:=f(x);
                   x:=x+h;
     end;
       rectangle (x0, y0, x0+lx, y0+ly);
       x:=a;
     while x<=b do
     begin
             x1:=round(x0+(x-a)/(b-a)*lx);
             y1:=round(y0+(max-f(x))/(max-min)*ly);
             putpixel(x1, y1, clGreen);
             x:=x+h;
     end;
     repeat until keypressed
    end.
    
    ******************************************************************
    Задача 17.2.2. Для Турбо Паскаля V 7.0 дана програма має вигляда- ти так. ******************************************************************
    program gratik;
    uses graph, crt;
    const x0=0; y0=0; a=-2; b=1;lx=639; ly=479; h=0.001;
    var graphdriver,graphmode,x1,y1:integer; x,max,min:real;
    function f(x:real):real;
    begin
        f:=x*sin(sqr(x))*exp(x);
    end;
    begin
       x:=a;
       max:=f(a);
       min:=f(a);
     while x<=b do
     begin
     if f(x) > max then max:=f(x);
     if f(x) < min then min:=f(x);
                   x:=x+h;
     end;
       graphdriver:=detect; graphmode:=0;
       initgraph(graphdriver, graphmode,'');
       rectangle (x0, y0, x0+lx, y0+ly);
       x:=a;
     while x<=b do
     begin
             x1:=round(x0+(x-a)/(b-a)*lx);
             y1:=round(y0+(max-f(x))/(max-min)*ly);
             putpixel(x1, y1, White);
             x:=x+h;
     end;
     repeat until keypressed
    end.
    
    Зауваження. Таким способом побудований графік є розтягнутим або стиснутим порівняно з реальним графіком. Щоб отримати реальну картину потрібно правильно підібрати параметри lx і ly. їх підбирають, виходячи із співвідношення пропорційності

    Наприклад, якщо lx=600, то для функції y=sinx2, x є[-2;1] параметр ly=lx*(max-min)/(b-a)=600*(1-0)/(1-(-2))=200.

    Завдання 17.2. Скласти програму для зображення на екрані графіка функції введеної з клавіатури.

Попередня
Зміст
Наступна