| dx, dy, x, у : Integer; { рабочие переменные }
| maxx, maxy : Integer; { разрешение монитора }
| BEGIN
| GrInit; { инициализация графики }
| maxx := GetMaxX; { функции из раздела 19.3 }
| maxy := GetMaxY;
| dx := maxx DIV 4; { вычисление стороны }
| dy := maxy DIV 4; { прямоугольника }
| Bar3D( dx, dy, maxx-dx, maxy-dy, 30,True ); { разд.19.5.3 }
| SetWriteMode( XORput ); { установка режима XOR }
| repeat { пока не нажата клавиша.. }
| x := Random( maxx - dx ); { случайная точка экрана }
| у := Random( maxy - dy );
| { рисование прямоугольника }
| Rectangle( x,y, x+dx, y+dy);
| Delay( 200 ); { пауза в 200 мс }
| { стирание прямоугольника }
| Rectangle( x,y, x+dx, y+dy );
| until KeyPressed; { условие конца цикла }
| ReadLn; { пауза до нажатия ввода }
| CloseGraph { закрытие графики }
| END.
Рис. 19.8
Режим, заданный процедурой SetWriteMode, распространяется только на рисование отрезками, т.е. на процедуры Line, LineTo, LineRel, а также Rectangle и DrawPoly.
- 421 -
19.3. Системы координат и "текущий указатель"
19.3.1. Координаты устройства и мировые координаты
В растровой компьютерной графике экран представляет собой прямоугольный массив адресуемых точек и любое изображение на нем образуется как композиция светящихся или погашенных пикселов (так называется минимальный элемент изображения). Эти точки адресуются двумя целыми — горизонтальным номером точки nx и вертикальным номером ny:
0 <= nx <= nx_max,
0 <= ny <= ny_max,
где nx_max и ny_max — количество адресуемых точек по горизонтали и по вертикали минус единица. В табл. 19.4 в колонке «Разрешение экрана» показано количество точек для различных режимов и типов адаптеров дисплеев.
В модуле Graph предусмотрена возможность программного опроса максимальных адресуемых координат экрана. Она реализована парой функций
GetMaxX : Integer;
GetMaxY : Integer.
Возвращаемые ими значения соответствуют параметрам nx_max и ny_max в наших обозначениях и будут различаться для различных режимов и адаптеров. При адресации точек координатами, большими чем эти значения, операция игнорируется.
Точка с адресом (0,0) обычно расположена в левом верхнем углу экрана дисплея. Координаты (nx, ny) называют также координатами устройства. Они могут принимать только целые значения.
В компьютерной графике используются еще две системы координат. Первая — физическая система координат (px, py), где px — физическое расстояние на экране по горизонтали, а py — по вертикали. Ее оси измеряются в дюймах или миллиметрах.
Вторая система координат — так называемая мировая. Она представляет собой декартову систему (X, Y), определенную программистом, и является независимой от типа устройства отображения:
xmin < x < xmax
ymin < у < ymax
Параметры, которыми задаются диапазоны изменения x и y (xmin, xmax, ymin, ymax), определяют прямоугольную область в
- 422 -
абстрактном математическом двумерном пространстве. В примере на рис. 19.9 приведены необходимые объявления и процедура установки мировых координат.
| TYPE { глобальный тип }
| World_Rec = RECORD { запись: }
| xmin.ymin, { предельные значения }
| xmax.ymax, { мировых координат }
| width,height: Real { диапазон мира }
| END;
| VAR
| my_world :World_Rec; { глобальная переменная-мир }
| nx_max,ny_max: Integer; { макс. разрешение экрана }
| PROCEDURE SetWindowWorld(minX,minY,maxX,maxY : Real);
| BEGIN
| with my_world do begin { работа с записью my_world }
| xmin = minX; { Назначение мировых координат в }
| ymin = minY; { соответствии с заданными }
| xmax = maxX; { фактическими параметрами... }
| ymax = maxY;
| width := maxX - minX; { Определение диапазона их }
| height:= maxY – minY { возможного изменения }
| end {with}
| END;
Рис. 19.9