Страница 15 из 39
Системы координат Все графические процедуры в инструментарии используют две отдельные координатные системы. Первая называется абсолютной ко- ординатной системой, а вторая - планетной координатной системой. Абсолютная координатная система определяется используемым вами графическим адаптером. Она представляется числом пикселей в горизонтальном и вертикальном направлениях (Пиксель - это наи- меньшая адресуемая точка на экране). Например, CGA в режиме 6 имеет 640 пикселов в ширину и 200 в высоту. Процедуры инструмен- тария используют координатную систему Х-Y, где ось Х представляет горизонтальное направление, а ось Y - вертикальное. По соглашению верхний левый угол экрана имеет координаты (0,0) и в случае конт- роллера CGA левый нижний угол имеет координаты (639,200). Хотя вы можете использовать абсолютную координатную систему, это делается редко из-за больших преимуществ планетной координатной системы. Планетная координатная система задается процедурой DefineWold, которая используется для определения начальной и ко- нечной точек координатной системы. Например, строка
DefineWord(1, 0, 0, 1000, 1000);
определяет координатную систему для планеты номер 1. Она делает 0,0 левым верхним углом и 1000,1000 правым нижним. Когда это сде- лано все графические процедуры в инструментарии будут настроены на координатную систему. Это позволяет создавать графические программы без учета того, какое графическое оборудование будет использоваться, таким образом давая большую независимость от ап- паратуры. Та же самая программа может быть скомпилирована для ра- боты либо с контроллером EGA в режиме 640х350, либо с CGA с раз- решением 640х200 без изменений. Для использования планетной координатной системы требуется трехступенчатый процесс. Во-первых, вы должны осуществить задание параметров планеты с помощью DefineWold. Во-вторых, вы должны выбрать одну из предварительно заданных планет с помощью SelectWold. Наконец, вы должны выбрать окно в планете с помощью SelectWindom. Процедура объявляется следующим образом:
procedure DefineWorld(WorlidNum:integer,StartX,StartY,EndX, EndY: real); procedure SelectWorid(WoridNum: integer); procedure SelectWindom(WindomNum: integer);
WorldNum - это номер планеты, а WindomNum - номер окна. StartX и StartY определяют координаты верхнего левого угла, а EndX и EndY - правого нижнего угла. Окно, которое вы выбрали, должно иметь тот же номер, что и номер планеты. Следующий фрагмент кода определяет две планеты и выбирает первую из них в качестве текущей среды:
DefineWorld(1, 0, 0, 1000, 1000); DefineWorld(2, 0, 0, 2000, 2000);
SelectWorld(1); SelectWorld(2);
После данной последовательности процедуры инструментария бу- дет работать в координатном пространстве 1000х1000. Следующим преимуществом планетной координатной системы явля- ется то, что она позволяет увеличивать масштаб изображения. Это реализуется уменьшением координат планеты при неизменности всех других параметров. Примеры этого будут даны позднее.
|