Лекция
Тема:
"Имитация движения в программе. Построение графиков функций".
План.
1. Основные приемы создания
движущихся объектов.
2. Построение графиков
функций.
1. Основные приемы создания движущихся объектов.
Для создание эффекта движущегося объекта
можно воспользоваться следующим подходом:
1.
Рисуем фигуру;
2.
Делаем паузу;
3.
Рисуем фигуру цветом фона (стираем);
4.
Изменяем координаты и повторяем пункты 1-3.
При
этом:
- если
фигуру нужно сдвинуть влево, то уменьшается координата по оси Х;
- если
фигуру нужно сдвинуть вправо, то увеличивается координата по оси Х;
- если
фигуру нужно сдвинуть вверх, то уменьшается координата по оси Y;
- если
фигуру нужно сдвинуть вниз, то увеличивается координата по оси Y;
- если
нужно выполнить движение по диагонали, то одновременно изменяются координаты по
обеим осям.
При
рисовании окружностей, эллипсов и дуг в качестве координаты служит всего одна
точка - центр, поэтому никаких отличий при построении данных фигур в движении
нет.
Однако
при рисовании прямоугольников и брусьев в качестве точек используются две -
левая верхняя и правая нижняя, поэтому в качестве координаты обычно выбирают
левую верхнюю точку, а координаты правой нижней задают через приращение.
Пример:
Составить программу, в которой бы окружность бегала по периметру экрана до
нажатия на любую клавишу.
USES CRT, GRAPH;
VAR I, X,
Y, GRAPHDRIVER, GRAPHMODE, N, M: INTEGER;
BEGIN
CLRSCR;
GRAPHDRIVER:=DETECT;
INITGRAPH (GRAPHDRIVER,
GRAPHMODE, 'C:\TP7\BGI');
N:=GETMAXX;
M:=GETMAXY;
SETBKCOLOR(15);
X:=40;
Y:=40;
REPEAT
SETCOLOR (4);
CIRCLE (X,Y,40);
DELAY(10);
SETCOLOR(15);
CIRCLE (X,Y,40);
X:=X+20
UNTIL X>=N-40;
REPEAT
SETCOLOR (4);
CIRCLE (X,Y,40);
DELAY(10);
SETCOLOR(15);
CIRCLE (X,Y,40);
Y:=Y+20;
UNTIL Y>=M-40;
REPEAT
SETCOLOR (4);
CIRCLE (X,Y,40);
DELAY(10);
SETCOLOR(15);
CIRCLE (X,Y,40);
X:=X-20
UNTIL X<=40;
REPEAT
SETCOLOR (4);
CIRCLE (X,Y,40);
DELAY(10);
SETCOLOR(15);
CIRCLE (X,Y,40);
Y:=Y-20;
UNTIL Y<=40
UNTIL KEYPRESSED;
CLOSEGRAPH
END.
Составить
программу, чтобы эти же действия выполнял прямоугольник.
USES CRT,
GRAPH;
VAR I,
X, Y, GRAPHDRIVER, GRAPHMODE, N,
M: INTEGER;
BEGIN
CLRSCR;
GRAPHDRIVER:=DETECT;
INITGRAPH (GRAPHDRIVER,
GRAPHMODE, 'C:\TP7\BGI');
N:=GETMAXX;
M:=GETMAXY;
SETBKCOLOR(15);
X:=0;
Y:=0;
REPEAT
SETCOLOR (4);
RECTANGLE (X,Y,X+40,Y+10);
DELAY(10);
SETCOLOR(15);
RECTANGLE (X,Y,X+40,Y+10);
UNTIL X>=N-40;
REPEAT
SETCOLOR (4);
RECTANGLE (X,Y,X+40,Y+10);
DELAY(10);
SETCOLOR(15);
RECTANGLE (X,Y,X+40,Y+10);
Y:=Y+20;
UNTIL Y>=M-10;
REPEAT
SETCOLOR (4);
RECTANGLE (X,Y,X+40,Y+10);
DELAY(10);
SETCOLOR(15);
RECTANGLE (X,Y,X+40,Y+10);
X:=X-20
UNTIL X<=0;
REPEAT
SETCOLOR (4);
RECTANGLE (X,Y,X+40,Y+10);
DELAY(10);
SETCOLOR(15);
RECTANGLE (X,Y,X+40,Y+10);
Y:=Y-20;
UNTIL Y<=10
UNTIL KEYPRESSED;
CLOSEGRAPH;
END.
2. Построение графиков функций.
Для
построения графиков математических функций, которые могут иметь разные области
значение и области определения, используется математический прием перевода
систем координат графического режима в координаты указанной функции.
Для
построения графиков следует воспользоваться программой, приведенной ниже:
USES CRT, GRAPH;
VAR N, M, I, I1, J, L, ND, NP: INTEGER;
A, B, C, D, X, Y, HX: REAL;
BEGIN
CLRSCR;
WRITE ('Введите область определения функции А и В
: ');
READLN (A, B);
X:=A;
ND:=DETECT;
INITGRAPH (ND, NP,
'C:\TP7\BGI');
N:=GETMAXX;
M:=GETMAXY;
SETCOLOR(4);
RECTANGLE (1, 1,N-1, M-1); Рисуем рамку вокруг графика RECTANGLE (4, 4, N-4, M-4);
C:=100; Допустимое положительное
значение функции
D:=-C;
HX:=(B-A)/(N-10);
FOR I1:= 5 TO N-5 DO
PUTPIXEL(I1,TRUNC(-C/(D-C)*M),5); Ось Y
FOR I1:=5 TO M-5 DO
PUTPIXEL(TRUNC((-A)/(B-A)*N ),I1,5); Ось Х
FOR I1:= 5 TO N-5 DO
BEGIN
X:=X+HX;
Y:=ABS(SQR(X)-13); Функция
I:=TRUNC((X-A)/(B-A)*N);
J:=TRUNC((Y-C)/(D-C)*M);
PUTPIXEL(I, J, 15);
END;
READLN;
CLOSEGRAPH;
END.
Для
построения функции необходимо указать допустимое положительное значение функции
(если значение бесконечно, то задайте 100), а также сам вид функции, записанный
по правилам записи алгебраических выражений на языке Паскаль.