Энциклопедия Turbo Pascal. Главы 9-11 - Системы координат

ОГЛАВЛЕНИЕ

Системы координат

Все графические процедуры в  инструментарии используют две отдельные координатные системы. Первая называется абсолютной координатной системой, а вторая - планетной координатной системой.

Абсолютная координатная система определяется используемым вами графическим адаптером. Она представляется числом пикселей в горизонтальном и вертикальном направлениях (Пиксель  - это наименьшая адресуемая точка на экране). Например,  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.

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