Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[36]

for j:= 1 to 2 do begin{ перерисовка промежуточных образов }

moveto(x[12], y[12]);

for i:= 1 to 12 do LineTo(x[i], y[i] ); if j = 1 then delay(40)

readln; CloseGraph

Координаты точек промежуточных образов можно определять не только равномерным разбиением прямых линий между исходным и целевым изображениями, но и соединяя соответствующие точки исходного и целевого контуров по кривым линиям с неравномерной разбивкой.

Практическое задание N 1. 66

1.Модификацией контурного изображения получить анимацию одного из образов в режиме SetWriteMode(1):

-раскрывающийся парашют,

-распускающийся цветок, либо листок ( использовать полярные координаты ),

-растущий гриб,

-растущая ель,

-сгорающая свеча,

-тающий снеговик,

-улетающий вдаль (или приближающийся) космический объект,

-сгибающаяся по тяжестью растущего плода ветка.

2.Модифицировать заполненные фигуры с использованием двух видеостраниц.

Глава 2. Программирование в среде Турбо - Паскаль

2. 1. Геометрические построения на плоскости 2. 1. 1. Построение графиков функций

Проведение численных расчетов желательно сопровождать визуализацией промежуточных и окончательных результатов на экране монитора. Это позволяет избежать некоторых ошибок, а также контролировать результаты расчета и оптимизировать алгоритм. Графики функций строятся обычно в декартовой системе координат (XoY). Функция может быть задана в явном виде, например, y=F(x), в неявном: F(x, y)=0, или в параметрическом виде: x=Fx(t), y=Fy(t).

Здесь F(x), F(x, y), Fx(t), Fy(t) - функции, x, t - аргументы (параметры).

Значения "x", "y" , полученные в результате расчета, будем называть расчетными координатами точек. При построении графика на экране монитора расчетные значения "x", "y" необходимо пересчитать в графические (экранные) координаты xG, yG. Напомним, что графические координаты изменяются в пределах [0 . . GetMaxX] - по горизонтали, [0 . . GetMaxY] - по вертикали.


Для изменения графических координат экрана в Турбо-Паскале предусмотрено задание графического окна процедурой:

SetViewPort(xG1, yG1, xG2, yG2, Cl);

где (xG1, yG1), (xG2, yG2) - координаты левого верхнего и правого нижнего вершин прямоугольника, образующего графическое окно (тип Integer).

Cl - признак рисования за границами окна (тип Boolean) задается в модуле Graph константами: ClipOn = True - рисование только в пределах окна, ClipOff= False - рисование в пределах экрана.

После задания графического окна изменяется начало системы координат (рисунок на экране сохраняется) и можно рисовать кривые с отрицательными значениями координат точек, например, установив начало координат в центре экрана:

xG2:= GetMaxX; yG2:= GetMaxY; xG1:= xG2 div 2; yG1:= yG2 div 2; и задав Cl:= ClipOff; Направление осей при этом не меняется, график не масштабируется, а процедура SetBkColor(N); изменит цвет всего экрана. Графическое окно можно очистить процедурой

ClearViewPort;

При этом восстанавливается система координат экрана, а изображение в области прямоугольника с координатами вершин (xG1, yG1), (xG2, yG2) затирается цветом фона.

Построение графиков на экране монитора имеет свои особенности, связанные с пиксел-ным изображением и системой координат экрана. Поскольку для некоторых режимов работы монитора отношение ширины к высоте экрана не равно (GetMaxX+1)/(GetMaxY+1), то при построении по точкам вместо окружности получается эллипс. Для рисования правильных геометрических фигур по точкам необходимо подключить процедуру:

GetAspectRatio(xx, yy);

возвращающую значения xx, yy - параметры (тип Word), определяющие коэффициент сжатия изображения k = xx/yy. При построении графиков или рисовании

фигур по точкам значения координат "y" необходимо умножить на "k". Отметим, что для монитора VGA в режиме Gm=2 значение k=1.

Практическое задание N 2. 1

1. Задать графическое окно с началом в центре экрана. Для драйвера VGA в режимах 0, 1, 2 при k=1 и k = xx/yy выполнить следующие действия.

1. 1. Процедурой Circle(x, y, r); нарисовать окружность радиусом 50 с центром в начале координат. Процедурой Line(x1, y1, x2, y2); нарисовать квадрат, описанный вокруг окружности. Очистить графическое окно.

1. 2. Процедурой Rectangle(x1, y1, x2, y2); нарисовать квадрат со стороной 100 с центром в начале координат. Процедурой Line(xi, yi, xj, yj); нарисовать окруж- ность (в виде многоугольника), вписанную в квадрат. Очистить графическое окно.

Примечание. Вывести надпись - номер режима и значение k. При k=1 и режимах 0, 1 окружность не будет вписанной в квадрат.

Построение графика функции Y = F(x) с масштабированием по осям координат.


При построении графиков функций на экране монитора необходимо преобразовывать расчетные координаты в графические с соблюдением определенных пропорций, а также предусмотреть возможность масштабирования графика по осям координат. Это вызывает необходимость создания специального алгоритма и процедур, обеспечивающих универсальность программирования графических изображений. Ниже приводится алгоритм построения графиков в правой системе координат, расположенной в заданной области экрана, с возможностью автоматического масштабирования.

Пусть задана непрерывная функция F(x) в диапазоне изменения аргумента x=[A. . В].

Требуется построить по N точкам график функции Y=F(x) в прямоугольной области экрана left, up, right, down.

0 < left, right < GetMaxX 0 < up, down < GetMaxY

Алгоритм построения графика функции Y=F(x).

1). Определяем массивы значений аргумента и функции: x[i], Y[i]=F(x[i]), где i= 1. . . N. При равномерном разбиении интервала [A. . В] массивы можно задавать операторами:

Dx:= (B-A)/(N-1);{ шаг разбиения по "х" }

for i:= 1 to N do begin

x[i]:= A + round(Dx*(i-1)); Y[i]:= F(x[i]) end;

2). Определяем наибольшее (Y MAX) и наименьшее (Y MIN) значения функции в заданном интервале изменения аргумента:

Y MAX:= Y[1]; Y MIN:= Y[1];

for i:= 1 to N do begin

IF Y MAX < Y[i] THEN Y MAX:= Y[i];

IF Y MIN > Y[i] THEN Y MIN:= Y[i] end;

В случае явного задания функции, для аргумента "х" имеем наибольшее значение X MAX:= В и наименьшее значение X MIN:= A.

Наибольшее и наименьшее значения функции и аргумента необходимы для полного размещения графика в расчетной области. Эти значения можно изменять с целью уменьшения размеров графика или увеличения его отдельных частей.

3). Определяем коэффициенты масштабирования при построении графика в заданной области экрана:

Kx:= (right-left)/(X MAX - X MIN); Ky:= (down - up )/(Y MAX - Y MIN);

Если параметры функции "х" и "y" имеют одинаковую размерность или оба безразмерны, то может появиться искажение естественной формы кривой вследствие разного масштабирования по осям координат: чрезмерное растяжение/сжатие по одной из осей. Например, при рисовании по точкам вместо окружности будет нарисован эллипс. Кроме этого следует учи-

left right



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53]