В растровой компьютерной графике экран представляет собой прямоугольный массив адресуемых точек и любое изображение на нем образуется как композиция светящихся или погашенных пикселов (так называется минимальный элемент изображения). Эти точки адресуются двумя целыми — горизонтальным номером точки 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), определяют прямоугольную область в {421} абстрактном математическом двумерном пространстве. В примере на рис. 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
Для перевода текущих координат точки из мировой системы в систему устройства можно воспользоваться процедурой с рис. 19.10.
PROCEDURE WorldToDevice(x, y : Real; VAR nx, ny : Integer);
BEGIN
with my_world do {работа с записью my_world }
begin
nx := Round((x-xmin)/width)*nx_max;
ny := Round((y-ymin)/height)*ny_max
end
END;
Рис. 19.10 {422}
Заметим, что переменные nx_max, ny_max должны быть инициализированы сразу после включения соответствующего графического режима. Это можно сделать, используя функции GetMaxX и GetMaxY. Так как в модуле Graph все процедуры и функции работают с координатами устройства, то в дальнейшем все действия будут осуществляться только в определенной режимом системе координат.