Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Pascal.rtf
Скачиваний:
11
Добавлен:
19.02.2016
Размер:
2.69 Mб
Скачать

Тема 10 Побудова графіку функції

Підключення графічної бібліотеки

Мова Паскаль

Мова Сі

Uses Graph;

#include <graphics.h>

… … …

… … …

Ініціалізація графічного режиму роботи екрану

Мова Паскаль

Мова Сі

Procedure Init_Graph;

void init_graph(void)

Var

{

GraphDriver, GraphMode,

ErrorCode : integer;

int GraphDriver, GraphMode,

ErrorCode;

begin

GraphDriver := detect;

GraphDriver = DETECT;

InitGraph(GraphDriver ,

GraphMode,’ ’);

initgraph(&GraphDriver, &GraphMode,

" " );

ErrorCode :=GraphResult;

ErrorCode = graphresult();

if ErrorCode <>grOK Then

if( ErrorCode != grOk )

begin

{

WriteLn(‘Graphics System Error:’,

GraphErrorMsg(ErrorCode ));

printf(" Graphics System Error: %s\n",

grapherrormsg( ErrorCode ) );

Halt;

exit( 1 );

End;

}

End;

}

Якщо при ініціалізації не виникло помилок, графічний режим роботи екрану встановлено і можна будувати зображення.

Установка розмірів активного вікна для виводу зображення

Установка розмірів активного вікна здійснюється процедурою SetViewPort(x1,y1,x2,y2,ClipOn), де x1,y1,x2,y2 - координати, відповідно, лівого верхнього та правого нижнього кутів вікна у пікселах.

Мова Паскаль

Мова Сі

SetViewPort(x1,y1,x2,y2, ClipOn)

setviewport(x1,y1,x2,y2, CLIPON)

Відображення осей координат

При відображенні осей координат та графіку функції необхідно врахувати такі фактори:

  • початок координат розташований в лівому верхньому куті встановленої робочої області(або екрану);

  • вісь ординат(У) екрану спрямована донизу;

  • координати точок на екрані вимірюються в пікселах.

Побудова графіка здійснюється відносно умовного центру з координатами (Cx,Cy) (дивися рисунок).

Якщо центр координат розташований по центру екрана, то його координати можна визначити так:

Тоді координати кінців осей координат будуть приблизно такі:

Ось

Початок

Кінець

Х

У

Х

У

Х

x1+10

Cy

x2-10

Cy

У

Cx

y1+10

Cx

y2-10

Віднімання або додавання 10 пікселів необхідно для того, щоб ось трохи відступала від границь вікна.

Для зображення осей необхідно скористатися процедурою Line, встановивши перед цим колір та стиль для виведення ліній:

Паскаль

Сі

SetLineStyle(SolidLn, 0, NormWidth );

SetColor(колір_осей);

Line(…);{координати кінців осі Х}

Line(…);{координати кінців осі У}

setlinestyle(SOLID_LINE, 0,

NORM_WIDTH);

setcolor(колір_осей);

line(…); line(…);

Для виведення стрілок та підписів осей можна скористатися процедурою текстового виведення OutTextXY, задавши для виведення стрілок символи ‘^’, ‘>’.

Паскаль

Сі

OutTextXY(кординати Х, У кінця осі, ‘^’);

OutTextXY(кординати Х, У кінця осі, ‘Y’);

outtextxy(кординати Х, У кінця

осі, “^”);

outtextxy(кординати Х, У кінця

осі, “Y”);

Крім того стрілки можна вивести, намалювавши їх крильця двома лініями.

Після виведення стрілок та підписів осей необхідно провести тестовий запуск програми для отримання насолоди від побудованого зображення або(та) виправлення помилок.

Вибір масштабу зображення

Визначення масштабних коефіцієнтів необхідно тому, що відстань в 1 піксел значно менше, ніж відстань, наприклад, в 1 см. Для вибору масштабу зображення необхідно:

  1. визначити діапазон зміни значень по осям. По осі х – це заданий інтервал [a, b], по осі У – [minY, maxY], що можна визначити з таблиці табулювання функції;

  2. розрахувати коефіцієнти масштабування за такими формулами:

.

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

Якщо точка А в декартовій системі координат має координати (XA,YA), то для виводу на екран їх треба переобчислити за формулами:

де Мху - масштабні коефіцієнти, які є необхідними для переведення величин XA,YA в пікселі. Віднімання при обчисленні У-координат визначено тим, що ось У екрану спрямована донизу.

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

Паскаль

Сі

x:=a, dx:=0.1;

while x<=b do

begin

PutPixel(Cx+x*Mx, Cy-f(x)*My

колір_пікселя);

x:=x+dx;

end;

x=a, dx=0.1;

while (x<=b)

{

putpixel(Cx+x*Mx, Cy-f(x)*My

колір_пікселя);

x+=dx;

}