Системы координат и «текущий указатель»
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

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

0 <= n х <= nx_max,

0 <= n у <= ny_max,

 

где nx_max и ny_max - количество адресуемых точек по горизонтали и по вертикали минус единица

В модуле Graph предусмотрена возможность программного опроса максимальных адресуемых координат экрана. Она реализована парой функций

GetMaxX : Integer ;

GetMaxY : Integer .

Возвращаемые ими значения соответствуют параметрам nx _ max и ny _ max, будут различаться для различных режимов и адаптеров. При адресации точек координатами, большими, чем эти значения, операция игнорируется.

Точка с адресом (0,0) обычно расположена в левом верхнем углу экрана дисплея. Координаты (nx, ny) называют также координатами устройства. Они могут принимать только целые значения.

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

Графические координаты задают положение точки на экране дисплея. Поскольку минимальным элементом, к которому имеет доступ программист, является пиксель, естественно в качестве графических координат использовать порядковые номера пикселей. Допустимый диапазон изменения графических координат составляет [0, rx- 1] для X и [0, ry - 1] для Y –координаты. Точкой отсчета является верхний левый угол экрана. Значения X- координаты отсчитываются слева направо, а Y-координаты - сверху вниз. Это отличает графические координаты от обычных декартовых координат, принятых в математике, и служит источником ошибок для начинающего программиста.

Для правильного отображения графика в декартовой системе координат на экране необходимо учесть следующее:

1. Графические координаты принимают только целочисленные значения.

2. Графические координаты принимают, ограниченные как снизу (нулевым значением), так и сверху (значением разрешения).

3. Графическая координата Y отсчитывается сверху вниз.

Таким образом, геометрические декартовы координаты точки (X, Y) для отображения на экране следует пересчитать в графические (Xg, Yg) по формулам:

Xg= ë Sx*X û + dx,

Yg= ry- ë Sy*Y û – dy,

 

Где ë X û - целая часть X, Sx , Sy- масштабные множители, выбираемые из условия

rx= ë Sx*Xmax û +1

ry= ë Sx*Ymax û +1

Xmax , Ymax- максимальные значения геометрических координат.

Слагаемые dx , dy обеспечивают смещение относительно левого верхнего угла экрана.

Изображение будет смещено в центр экрана при dx = ë rx /2 û , dy = ë ry /2 û .

В графическом режиме текущий указатель перемещается специальными процедурами.

Процедура MoveTo (х, у: Integer ) перемещает его в точку экрана с координатами (х, у).

Процедура MoveRel ( dx , dy : Integer ) перемещает текущий указатель на dx пикселов по горизонтали и соответственно на dy по вертикали относительно последнего положения текущего указателя. Положительные значения dx и dy увеличивают его координаты, а отрицательные — уменьшают.

В системе координат дисплея ось Y направлена вниз, поэтому, если указатель надо перенести вверх, то приращение dy должно быть отрицательным.

Для определения текущего положения графического курсора используются функции

GetX : Integer ;

GetY : Integer ,

возвращающие положение указателя соответственно по оси X и по оси Y. Позиционирование текущего указателя и опрос его местонахождения работают корректно, даже если работа происходит за пределами координат устройства.

Изменяют положение текущего указателя также процедуры LineTo, LineRel, OutText.

Все процедуры инициализации и очистки экрана (InitGraph, GraphDefaults, ClearDevice, SetGraphMode, SetViewPort и ClearViewPort) устанавливают текущий указатель в положение (0,0).



Дата: 2019-05-29, просмотров: 191.