51
Рисует школьная ЭВМ
А. Г. ШЕГОЛЕВ
Со школьной ЭВМ, сабженной дисплеем, можно обшаться в диалоговом режиме по заранее предустретному сценарию (см., например, статьи В. А. Каймина в «Кванте», 1986, № 10, 11). При этом ЭВМ и ее пользователь обмениваются фрагментами текстов и числовыми данных. Между тем, большинство школьных микроЭВМ позволяет не только «печать», но и «рисовать» на экране, т. е. обладает графическими возможностями.
Для того чтобы на экране появилось изображение, мы должны указать исполнителю (школьной ЭВМ), где и что необходимо нарисовать. Поэтому прежде всего необходимо договориться о системе координат.
Приняята в микроЭВМ координатная система отличается от известной вам по школьному курсу математики. Начало координат (точка O) помещается в левом верхнем углу, а оси абсцисс и ordinate направлены так, как показано на рисунке 1. Поле экрана представляет собой множество точек, каждой из которых имеет определенный цвет, а координаты любой точки — целые числа x, y в пределах (для экрана ЭВМ «Ямаха») 0≤x≤255, 0≤y≤191.
Так же, как дом складываются из кирпичей, любое сложное изображение мы будем «строить» из простейших элементов. Для этого дополним знакомый вам школьный алгоритмический язык следующими графическими командами:
- точка (x, y), цвет — изображить точку цвета цвет с координатами (x, y);
- отрезок от (x1, y1) до (x2, y2),
52
цв — начертить отрезок, соединяющий точки с координатами (x1, y1) и (x2, y2) цвета цв;
3) округн(x, y), r, цв — нарисовать окружность радиусом r с центром в точке (x, y) цвета цв;
4) дуза (x, y), r, om α до β, цв — нарисовать дуг окружности (x, y), r, цв от угла α до угла β (рис. 2);
5) закрасить (x, y), цв — закрасить цветом цв точку (x, y) вместе с окружностью в пределах заключенной эту точку замкнутой линии того же цвета (в качестве части этой линии может использоваться граница экрана); если же такого контур нет, закрасиется весь экран.
Оказывается, перечисленные команд в полне достаточно, чтобы изобразать довольно замыслованные фигуры. Например, изображение скрипичного клиона можно представить как совокупность отрезков и дуг разного радиуса, плавано переходящих друг в друга (рис. 3).
Для облегчения построения часто повторяющихся элементов введем еще две команды:
6) рамка от (x1, y1) до (x2, y2), цв — изобразить прямоугольную рамку со стороными, параллельными сторонам экрана, цветом цв; прямоугольник задается координатами двух диагональных вершин (x1, y1), (x2, y2) (рис. 4);
7) рамка-закраш от (x1, y1) до (x2, y2), цв — закрасить рамку 6) и ее внутреннюю область цветом цв.
Алгоритмы, написанные с использованием графических команд, могут быть переведены на любой язык программирования, имеющий соответствующее средства. Вот как выглядит запись операторов 1) — 7) на языке MSX-BASIC, принятом на ЭВМ «Ямаха».
- N PSET (X, Y), C (точка)
- N LINE (X1, Y1) — (X2, Y2), C (отрезок)
- N CIRCLE (X, Y), R, C (окружность)
- N CIRCLE (X, Y), R, C, A, B (дуга; углы A и B — в радиах)
- N PAINT (X, Y), C (закраска)
- N LINE(X1, Y1) — (X2, Y2), C, B (рамка)
- N LINE(X1, Y1) — (X2, Y2), C, BF (закрашенная рамка).
Синним здесь выделены изменяющиеся элементы, в качестве которых могут использоваться числа (константы), а также имена переменных. N — номер (нумерция операторов в Бейсике обязаельна), C — целое число от 1 до 15, обозначающее цвет, который нужно закрасить данный объект:
1 — черный, 6 — темно-красный,
2 — средне-зелень, 7 — голубой,
3 — светло-серый, 8 — средне-красный,
4 — темно-голубой, 9 — светло-красный,
5 — светло-голубой, 10 — темно-желтый,
11 — светло-желтый,
12 — темно-зелень,
13 — розовый,
14 — серый,
15 — белый.
Например, оператор Бейсика 20 PSET(50, 100), 6 приведет к появлению на экране темно-красной точки с координатами x=50, y=100.
Кроме того, перевод ЭВМ в графический режим осуществляется по команде графика, что на Бейсике будет записано как SCREEN 2.
Займется теперь изображением картины, помещенной в начале статы. Сценарий в этом случае — это рисунок, выполненный на бумаге. Вообще же графический сценарий представляет собой последовательность рисунков (сцен) и описание логики их через