Квант

56

А. Салихова, Н. Соколова

Графическая система Шпага

На обложках нашего журнала неднократно публикались рисунки, выполненные ЭВМ. Программы для «компьютеров-удожников» составляли опытные программы при помощи довольного сложных языков программирования и систем машинной графики.

Многие рисунки для раздела «Искусство программирования» тоже выполнены ЭВМ, но по программам, авторам которых — от 8 до 15 лет. На нашей фотографии показана группа юных программистов за работу у графопростролетеля. Крайняя слева школьница — семиклассика Ася Салихова и ее подруга восемиклассика Наташа Соколова разработали набор процедур графического системы Шпара, с использованием которого пшутая программа нашей машинной графики.

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

Система Шпага — это набор процедур, каждая из которых проводит какую-либо линюю или выполняет вспомогательное действие (например, меняет систему координат). Процедурами Шпаги можно пользоваться в различных языках программирования, в том числе в языках Робик, Рапира, Алгол, Поплан и Паскаль. Шпага — это прежде всего учебная система, поэтому называния и параметры ее процедур*) выбирались так, чтобы их было легко запомнить и понять. Кстати, названные самой системы расшифровывает так:

Школьный Пакет Графических процедур, Адаптированный

С чего начинается рисунок?

Для того, чтобы машина нарисовала такой пароходик, как на рисунке 1, ей надо дать задание.

Во-первых, следует определить место для рисунка, т. е. задать рамку нужного размера (например, 100 на 100 мм). После этого необходимо

*) Если слова «процедура» и «параметр» показались вам незнакомыми, посмотрите материалы первых уроков Заочной школи программирования («Квант», 1979, №№ 9—11).

57

Димо подвести pero или другой рисунной инструкiment в точку А, проведи отрезок в точку В, в точки С и D, вновь в точку А. Затем переставить инструкмент в точку Е и продолжить работу.

Для выполнения этих действия предназначаемые основные процедуры Шпаги: РАМКА, ПОДВОД, ЛУЧ, ТОЧКА, КРУГ и другие. Например, программа на Рапире для изображения парoxodика могла бы выглядеть так: РАМКА (100, 100); ПОДВОД (25, 30); ЛУЧ (15,45); ЛУЧ (85, 45); ЛУЧ (75, 30); ЛУЧ (25, 30); ПОДВОД (35, 45); ЛУЧ (35, 50); ЛУЧ (60, 50); ЛУЧ (60, 45); ПОДВОД (45, 50); ЛУЧ (45, 60); ЛУЧ (50, 60); ЛУЧ (50, 50); КОНЕЦ;

Описем подробнее работу графических процедур, встретившихся в этой программе.

Процедура РАМКА (Д, В) играет очень важную роль в нашей системе, с нее должна начинаяся любая программа, в которой используется процедуры Шпаги. Параметры Д и В в этой процедуре указывают размеры рамки в миллиметрах (Д — длина, В — высота). Исполяция процедуры РАМКА, машина, во-первых, наисует рамку указаанного размера, во-вторых, наишет над рамкой и под ней некоторые сведения о рисунке (название графической системы, дату и время использования рисунка) и, в-третьих, установит внутри рамки стандартную прямогольную систему координат: единица масштаба — 1 мм, начало координат в левом нижнем углу рамки.

Как работает процедуры ЛУЧ и ПОДВОД, вы уже, верятоно, доказались; процедура ПОДВОД (X, Y) помещает рисунной инструкмент (перо графопостроителя) в точку (X, Y), при этом никаких следов на бумаге не остается. Процедура ЛУЧ (X, Y) проводит отрезок прямой линии из точки, в которой перед этим находилосьpero, в точку (X, Y).

Все рисунские процедуры системы Шпага работают только внутри установленной рамки. Например, если при выполнении процедуры ЛУЧ начальная или конечная точка отрезка (или обе сразу) из-за ошибки программы оказались за рамкой, то будет нарисована только та часть отрезка, которая находится внутри рамки.

Процедура КОНЕЦ, не имеющая параметров, сообщает машине, что программа закончила работу с графопостроителем. После выполнения никакими процедурами Шпаги пользоваться нельзя.

Название большинства процедуры системы можно сокращать. В частности, слова РАМКА, ЛУЧ и ПОДВОД можно сократить до одной буквы: Р, Л и П. В отличие от них, название процедуры КОНЕЦ сокращать нельзя.

В сокращенном виде программы оказается очень компактной. Например, для изображения самолета.

58

Достаточно написать*):

Р (120, 100); П (30, 46); Л (15, 46);
Л (15, 40); Л (30, 40); П (20, 46);
Л (20, 60); Л (15, 60); Л (15, 25);
Л (20, 25); Л (20, 40); П (40, 60);
Л (40, 46); Л (30, 46); Л (40, 60);
Л (78, 60); Л (85, 80); Л (100, 80);
Л (100, 55); Л (85, 30); Л (30, 30);
Л (30, 46); П (48, 60); Л (60, 90);
Л (80, 90); Л (70, 60); П (50, 30);
Л (50, 46); Л (60, 46); Л (60, 30);
П (70, 50); Л (48, 50); Л (38,20);
Л (60, 20); Л (70, 50); . КОНЕЦ;

Рис. 4.

Точки, круги,дуги

Процедура ТОЧКА (X, Y) (сокращенное — T (X, Y) позволяет изобразить в нужном месте рисунка точку. После этого pero остается в точке (X, Y).

Процедура КРУГ (R) рисунет окружность радиуса R с центром в точке, в которой перед этим находится pero. После использования процедуры pero возврашается в центр. Сокращенное название этой процедуры — K (R). Например, по программе: Р (100, 100); Т (50, 50);
К (10); К (20); К (30); К (40);
К (50); КОНЕЦ;

ЭВМ. нарисует несколько концентрических окружностей (нечто вроде мишени) с точкой в центре.

Для изображения друг предусят преудорено четыре процедуры: ДУГАЛ, ДУГАП, ДУГАЛЬ, ДУГАПБ (сокращенное — ДЛ, ДП, ДЛБ, ДПБ). У каждой из них по три параметра:

*) Программа составлена третьелассцией И. Афанасьевой.

Рис. 3.

(X, Y, R). Х и Y — это координаты точки, в которой должна закончиться дуга, R — радиус, которое проводится дуга. Так же, как и отрезок в процедURE ЛУЧ, дуга проводится из той точки, где перед этим находится pero.

Из чертежа 4 видно, что из одной точки в другую заданным радиусом можно проверить, как правило, 4 разные дуги: во-первых, больше или меньше полукругности и, во-вторых, по часовой стрелке или против. Эти четыREM случаем и соответствуют четыре процедуры. Буква Б в конце названия означает, что дуга должна быть больше полукругности; процедуры ДП и ДПБ рисуют дугу против часовой стрелки, то есть с правой от вектора, проведенного из начальной точки дуги в конечную (отсюда название ДП — «дуга права»), процедуры ДЛ и ДЛБ рисуют дугу слева от вектора, то есть по часовой стрелке. В качестве примера приведем программу для рисунка 4:

Р (100, 100); П (70, 30);
Л (30, 70); Л (33, 70); Л (30, 67);
Л (30, 70); П (70, 30); ДП (30, 70, 35);
П (70, 30); ДЛ (30, 70, 35);
П (70, 30); ДП (30, 70, 35);
П (70, 30); ДЛБ (30, 70, 35);
.KОНЕЦ;

Если задан список маленький радиус, то дуга не будет нарушена, при этом система отпечает сообщение:

ОШИБКА. РАДИУС МЕНЬШЕ ПОЛОВИНЫ РАССТОЯНИЯ МЕЖДУ TOЧКАМИ.

59

Надписи

Очень часто бывают нужно размещить на рисунке какие-нибудь надписи. Для этого в системе Шпага предусмотрены процедуры НАДПИСЬ, НПН и СТРОКА.

Процедура НАДПИСЬ (Т, В, Д) (сокращенно — НП (Т, В, Д)) позволяет изобразить горизонтальную надпись прямыми (вертикальными) буквами. Первый параметр процедуры — это текст, который нужно написать (или имя, значением которого является текст). Точка, в которой находится пERO, считается левым нижним углом надписи. Из этой точки пERO начинает рисовать. Параметр В задает высоту надписи, а параметр Д — ее длину.

Процедура НПН (Т, В, Д) работает точно так же, но дает надпись со стандартным наклоном впраvo.

Процедура СТРОКА (Т, X1, Y1, X2, Y2, X3, Y3) позволяет нарисовать текст Т в произвольном положении. Остальные параметры этой процедуры — это координаты трех точки: (X1, Y1), (X2, Y2) и (X3, Y3). В параллелограмм, вершинами которого является эти точки (четвертую вершину легко достроить), вписывается текст. Первая из перечисленных точек считается левой нижней вершиной параллелограмма, вторая — левой верхней и третья — правой нижней. Манипуляция этих точек, можно получить даже перевернуть и зеркальное отраженные надписи.

Во всех этих процедурах надписи выполняются строчными буквами; если же мы хотим получить прописнуюную букву, то перед ней в тексте нужно поставить двоеочие.

Примеры работы описанных процедур приведены на рисунке 5, выполненном по следующей программе:

`:КВАНТ’ — > А;

Р (100, 100); П (10, 85); НП (A, 10, 30); П (60, 85); НПН (A, 10, 30); СТРОКА (A, 60, 40, 60, 47, 80, 20); СТРОКА (A, 60, 50, 60, 67, 80, 70); СТРОКА (A, 40, 40, 40, 47, 20, 20); СТРОКА (A, 40, 57, 40, 50, 20, 77); .КОНЕЦ;

Изменение системы координат
Систему координат, установленную процедурой РАМКА, можно изменить. Для этого используются процедуры МАСШТАБ, НАЧАЛО, ПОВОРОТ и некоторые другие.

Процедура МАСШТАБ (А) (сокращенно — М (А)) установливает новую единицу масштаба, равную А мм.

Процедура НАЧАЛО (X, Y) (сокращенно — Н (X, Y)) переносит начало координат в точку (X, Y) действующей системы; процедура ПОВОРОТ (А) поворачивает систему координат на угол А вокруг действующего наcala координат. Угол задает в радианах, при A>0 поворот выполняется против часов стрелки, при A<0 — по часовой стрелке.

Если в одной программе несколько раз использовались процедуры НАЧАЛО и ПОВОРОТ, то каждая из них используется в системе координат, установленной процедуре, и в конце концов была трудно определить, какая система координат действует в данной момент. Поэтому предусмотрен не имеющая параметров процедура СБРОС (сокращенно — С), восстанавливающая стандартную систему координат.

От стандартной системы координат можно перейти к полярным координатам при помощи процедуры без параметров ПОЛЯР. В этом случае во всех процедурах Шпаги параметр Х считается полярным радиусом, а Y — полярным углом. Для возврата к декартовым (прямоугольным) координатам служит процедура ДЕКАРТ.

Мы описали здесь лишь основные процедуры системы Шпага. Использование вместе с ними конструкции различных языков программирования, циклы, описания процедур, условия предписания и т. д., можно получить с помощью системы Шпага самые разнообразные рисунки и чертежи, строить графики сложных функций, изготовлять мультфильмы и выполнять другие графические работы.