ГРАФИЧЕСКИЕ ОПЕРАТОРЫ_
♦PLOT, *DRAW, *LINE, *ВОХ, *TRIANGLE, ^ELLIPSE, *GPAT
Стандартный Spectrum-Бейсик предоставляет в
распоряжение пользователя три графических оператора. PLOT, DRAW и
CIRCLE. Диалект PRO-DOS дополняет этот список еще семью.
Операторы
♦PLOT х, у
*DRAW х, у
очень похожи на свои стандартные аналоги.
Отличие заключается в том, что +PLOT и *DRAW доступна вся площадь
экрана, включая две нижние символьные строки (служебный экран).
Следовательно, для этих операторов размеры экрана составляют не 256x176
точек, как для операторов стандартного Бейсика, а 256x192. Нелишне
будет заметить, что для функции стандартного Бейсика POINT (х, у) (см.
стр 88), информирующей о состоянии пикселя (включен-выключен),
служебный экран по-прежнему остается недоступным
11и( ком.ку начало отсчета координат привязано
к нижнему лево-чу } i/.y экрана, то для графических операторов PRO-DOS
оно смещается на 1В пикселей вниз. Следовательно, результаты выполнения
опера юров DRAW и PLOT, с одной стороны, и *DRAW и *PLOT, с другой
стороны, при одинаковых параметрах не будут совпадать. В этом легко
убедиться, выполнив следующую программу:
30 PLOT 30,30: DRAW 70,70: REM Стандартные операторы 40 *PLOT 30,30: +DRAW 70,70: REM Операторы PRO-DOS 50 PAUSE 0
Для полноты картины следует еще добавить, что
+DRAW, в отличие от DRAW, не умеет рисовать дуги и вообще не
«переваривает» введение трех параметров.
Человек, мало-мальски знакомый с иностранными
языками, легко сообразит, что операторы *L1NE, *ВОХ, *TRIANGLE, и
+ELLIPSE строят на экране, соответственно, отрезок прямой,
прямоугольник, треугольник и эллипс. Этим операторам также доступны все
24 символьные строки экрана. Формат первых двух операторов одинаков:
*LINE х1, у1, х2, у2
*ВОХ х1, у1, х2, у2
В первом операторе двумя парами значений
задаются координаты концов отрезка, во втором — координаты
расположенных по диагонали вершин прямоугольника. Так, программа
30 LET х1=20: LET х2=120: LET у 1=50: LET у2=150 40 +LINE xl, у1, х2, у2 50 *ВОХ х1, у1, х2, у2 60 PAUSE 0
нарисует на экране прямоугольник и его диагональ. Отметим, что инструкции
★LINE xl, у1, х2, у2
и
♦LINE х2, у2, xl, у1
эквивалентны. То же самое касается и различных вариантов записи оператора *ВОХ:
♦BOX xl, yl, х2, у2 ♦BOX х2, у2, х1 f yl ♦BOX х1, у2, х2, у 1
и
♦BOX х2, у1, х1, у2
К сожалению, стороны прямоугольника, построенного оператором ♦BOX, всегда параллельны осям координат.
Оператор ♦TRIANGLE требует 6 параметров:
♦TRIANGLE xl, у1, х2, у2( хЗ, уЗ
В списке параметров фигурируют пары
«абсцисса-ордината» трех вершин треугольника, причем
порядок перечисления этих пар непринципиален.
Если операторы ♦LINE, ♦BOX и +TR1
ANGLE являются по сути избыточными (их действие легко смоделировать с
помощью +PLOT и ♦DRAW), то оператор ^ELLIPSE уникален: ничего
похожего нет ни в стандартном Spectrum-Бейсике, ни в каком-либо из
известных его диалектов. Он строит эллипс, что сделать с помощью других
операторов не так-то просто (хотя и возможно). Следом за ключевым
словом ♦ELLIPSE указываются 4 параметра:
♦ELLIPSE х, у, а, Ь
Первые два параметра (х, у) определяют
координаты центра эллипса, вторые (а, Ь) — соответственно,
горизонтальную и вертикальную полуоси. И опять же, как и стороны
прямоугольника, выводимого оператором +ВОХ, полуоси эллипсов всегда
параллельны границам экрана.
Окружность, как известно, является частным
случаем эллипса. Для ее построения нужно задать одинаковые длины
полуосей. Действительно, оператор
♦ELLIPSE х, у, г, г
изобразит на экране окружность радиуса г с
центром в точке с координатами (х, у). Такая альтернатива оператору
CIRCLE может пригодиться при построении окружности в области служебного
экрана.
Для ценителей гармонии линий приведем пример программы, рисующей семейство концентрических эллипсов:
30 LET х=128: LET y=96: REM Центр эллипса
40 FOR а=10 ТО 100 STEP 20: REM Горизонтальная полуось
50 FOR Ь=10 ТО 100 STEP 20: REM Вертикальная полуось
60 ♦ELLIPSE х, у, а, Ь
70 NEXT Ь: NEXT a: PAUSE 0
Несколько замечаний, общих для всех графических
операторов PRO-DOS. В отличие от стандартных, они не допускают
использования временных атрибутов. Так, компьютер откажется
«глотать» конструкцию вроде
*PLOT INK 5; 30f 40
Более того, графические операторы совершенно
равнодушны к постоянным атрибутам, установленным инструкциями INK,
PAPER и другими (не в составе оператора PRINT).
Цветную графику можно получить, лишь вставив в
программу фиктивный оператор печати: ничего не печатающий, но
устанавливающий атрибуты, например:
PRINT INK 5; OVER 1; BRIGHT 0
Попробуйте модифицировать программу построения эллипсов, добавив в нее под номером 35 приведенную строку.
Графические операторы PRO-DOS иначе, чем их
стандартные аналоги, реагируют на выход за границы экрана в процессе
построения линий. Предоставим читателю возможность самостоятельно
поэкспериментировать, присваивая параметрам графических операторов
большие значения (но не более 255). При этом особенно забавные эффекты
будут получаться при выполнении оператора *ELLIPSE. В отличие от
стандартных графических операторов, при выходе линии за пределы экрана
в ряде случаев не выдается сообщение об ошибке, например
*PLOT 128,96: *DRAW 200, 200
или
♦ELLIPSE 128,96,50,100: PAUSE 0
Действие всех графических операторов PRO-DOS может быть модифицировано с помощью оператора
♦GPATп
Он устанавливает вид линий, которыми будут производиться графические построения: сплошные, с разрывами или вообще невидимые.
*GPAT относится к неисполняемым
операторам (подобно INK, PAPER и другим). Это означает, что сам он не
вызывает никаких действий, а лишь влияет на результат выполнения
некоторых последующих инструкций. Позволим себе привести в качестве
аналогии уставные армейские команды «ШАГОМ» и
«БНГОМ», которые сами не оказывают никакого видимого
воздействия на дисциплинированных военнослужащих, а лишь сообщают, что
им придется делать после команды «МАРШ». Операторы такого
типа характерны для PRO-DOS, и мы еще не раз с ними встретимся.
Вид линии для графических построений задается
параметром п (0...255), следующим за оператором *GPAT. Его значение,
записанное в двоичном виде, наглядно представляет периодически
повторяющийся элемент линии — 8 пикселей, из которых включенным
пикселям соответствуют единицы, а погашенным — нули. Удобно
вводить параметр в операторе +GPAT в двоичном виде с помощью функции BIN. Например, вместо
35 39GPAT 105
записывать
35 *GPAT BIN 01101001
Попробуйте вставить приведенную строку в пример программы, рисующей эллипсы (рис.7).
Выполнение +GPAT с нулевым аргументом
заставляет графические операторы «строить» фигуры
невидимыми линиями. Оператор *GPAT 255 восстанавливает режим рисования
сплошной линией; этот же режим устанавливается при инициализации PRO-DOS
*GPAT имеет и еще одно полезное применение, о котором логичнее рассказать в следующем разделе.