А.А.Павлова
Базовая графика версий
языка БЕЙСИК, близких к MSX
Машинная графика становится все
более доступным, популярным и
пленительным средством общения
человека с ЭВМ. Знание азов компь-
ютерной графики и умение их ис-
пользовать на простейшем базовом
уровне становятся неотъемлемым
элементом грамотности и культуры
каждого современного человека.
В настоящее время программисты
самых высоких профессиональных
рангов создали немало систем ма-
шинной графики, графических редак-
торов и пакетов прикладных графи-
ческих программ, позволяющих ус-
пешно применять средства машинной
графики практически во всех сферах
человеческой деятельности. Эти гото-
вые системы в ряде случаев не тре-
буют от пользователя даже поверх-
ностного знакомства с сутью, принци-
пами и секретами работы того черно-
го ящика, который дает "мистиче-
ское" начало возникновения на экра-
нах мониторов изумительных карти-
нок, восхищающих воображение да-
же видавших виды профессионалов
традиционной, ручной графики.
А чтобы приоткрыть этот черный
ящик и сделать его хотя бы немного
прозрачным для любознательного
пользователя, надо ознакомить его с
простейшими базовыми средствами
машинной графики.
Описываемая версия БЕЙСИКа
очень близка к версиям MSX-БЕЙСИК
и им подобным, разработанным для
многих отечественных и зарубежных
ПЭВМ типа: "Корвет", УКНЦ, "Яма-
ха", IBM PC и т.п. Для всех названных
версий (диалектов) языка БЕЙСИК
(MSX) характерны богатство и просто-
та графики наряду с возможностями
их дальнейшего расширения. Запись
графических операторов и их реали-
зация на различных ПЭВМ, работаю-
^^ ___
щих с версиями языка БЕИСИК, близ-
кими к MSX, в основном адекватны.
Предлагаемые примеры графиче-
ских программ реализованы на гра-
фическом экране видеомонитора
"Электроника 32 ВТЦ-201", имеющем
такие основные технические данные:
число видимых точек на экра-
не — 256x256; 32 символах32 строки;
номинальный размер рабочего поля
экрана — 154x219 мм; размеры ки-
нескопа по диагонали — 32 см; ко-
личество цветов — 4.
При описании графических опера-
торов будем иногда использовать
квадратные скобки []. Текст, написан-
ный в этих скобках, не обязателен, но
если он используется в команде,
операторе или функции, то квадрат-
ные скобки не набираются.
Для генерации изображений на
экране монитора используется ко-
манда RUN; для очистки экра-
на — CLS; для удаления всех про-
грамм из памяти — NEW.
Графические экраны
Операторы COLOR, PAINT,
CLS, LOCATE
Мониторы большинства ПЭВМ, в
том числе и БК0010-01, имеют рас-
тровые экраны. Растровый экран
можно рассматривать как конечное
множество (массив) ячеек, находя-
щихся внутри прямоугольника с гори-
зонтальными и вертикальными сторо-
нами. Все ячейки этого массива рас-
положены в строгом порядке по
строкам и столбцам. Каждая ячейка
определяется как область пересече-
ния столбца с порядковым номером
X и строки с порядковым номером
У, т.е. каждую ячейку можно обоз-
начить (идентифицировать) так: (X, У).
На экране рассматриваемой нами
ПЭВМ верхняя строка ячеек принята
за координатную ось х, левый стол-
бец ячеек — за ось у, а верхняя ле-
вая ячейка служит началом (0,0) сис-
темы координат заданного экрана.
В этой статье представлены базовые графические операторы
версии языка БЕЙСИК, встроенной в доступный и популярный в
нашей стране бытовой компьютер микро-ЭВМ Б К 0010-01. Здесь
приведены также программы-листинги простейших примеров их
реализации на экране видеомонитора.
Координату с максимальным зна-
чением имеет точка правого нижнего
угла экрана (255, 240). При этом
строки, отводимые для служебных
надписей в верхней части экрана, не
учитываются.
В дальнейшем эти ячейки экрана
будем называть точками, такие коор-
динаты — абсолютной координатной
идентификацией.
Для данного типа экрана понятие
точки адекватно понятию пикселя (от
английских слов — picture element)
которым называют наименьший эле-
мент экрана ЭЛТ, которому может
быть независимым образом заданы
цвет, интенсивность и другие харак-
теристики изображения. Расстояние
между соседними пикселями (точка-
ми) называют растровой единицей
(понятия пикселя и точки не всегда
адекватны — например, для экрана
дисплея ПЭВМ "Ямаха" в графиче-
ском режиме SCREEN 3 одна точка
экрана содержит четыре пикселя).
Экран ПЭВМ БК0010-01 все время
доступен для вывода текста и графи-
ческой информации и не требует
специальной команды подготовки
(инициализации) графического режи-
ма работы дисплея (в отличие от на-
званных ранее типов ПЭВМ, в кото-
рых каждый режим работы опреде-
ляется посредством оператора
SCREEN с соответствующими аргу-
ментами).
Итак, графический экран ПЭВМ
БК0010-01 имеет размер 256x241 то-
чек, что соответствует матрице из
61696 ячеек — адресуемых точек.
• ОПЕРАТОР COLOR устанавлива-
ет цвет экрана.
Формат: COLOR CI, С2
где: С1 — целое выражение, ука-
зывающее номер цвета текста и гра-
фического изображения (переднего
плана);
число в пределах (0,4); С2 — це-
лое выражение, указывающее номер
цвета фона;
число в пределах (0,4).
Номера цветов монитора:
0 — прозрачный (цвет фона); 0
для фона означает черный цвет;
1 — красный;
2 — зеленый;
3 — синий;
4 — черный.
В момент включения монитора и
по умолчанию устанавливается стан-
дартный цветовой режим, соответст-
вующий записи: COLOR 1,4 (красное
изображение на черном фоне).
Если в графических операторах не
указывать номера цвета изображе-
ния, то по умолчанию устанавливается
цвет, определяемый номером С1 в
последнем из встретившихся в опе-
раторе COLOR. В случае нарушения
допустимых границ номеров цветов
выдается сообщение об ошибке 5.
Если цвета изображения и фона
случайно совпали, то создается впе-
чатление пустого экрана и эффекта
"зависания", так как компьютер не
реагирует на клавиатуру. Для приве-
дения ЭВМ в готовность нужно оста-
новить выполнение программы по-
средством клавиши "СТОП", после
чего восстановить стандартный цвето-
вой режим нажатием ключа 6.
При отсутствии обоих параметров
С1 и С2 выдается сообщение об
ошибке 24.
• ОПЕРАТОР PAINT окрашивает
часть экрана в один цвет.
Формат: PAINT (X, У), [С], [С1],
где: X, У — координаты началь-
ной точки, которая должна находить-
ся строго внутри раскрашиваемой об-
ласти, но в то же время в пределах
экрана;
С — целое выражение, задаю-
щее номер цвета окрашиваемой час-
ти экрана; число из интервала (0,4);
С1 — целое выражение, задаю-
щее номер цвета контура окрашива-
емой части экрана; число из интерва-
ла (0,4).
Если в этом операторе опущен па-
раметр С, то область окрашивается
цветом, указанным в последнем из
встретившихся операторов COLOR.
Если опущен параметр С1, то область
закрашивается цветом своего конту-
ра.
Контур окрашиваемой области
должен быть замкнутым, иначе кра-
ска "прольется" и зальет весь экран
(либо его часть вне нужной области).
За пределами экрана оператор не
работает.
В операторе PAINT положение на-
чальной точки можно задать и отно-
сительными координатами, используя
элемент оператора STEP (шаг), пара-
метры которого указывают величины
сдвига X и У начальной точки относи-
тельно координат последней точки,
обработанной графическим операто-
ром.
Работу этого оператора демонст-
рируют многие примеры, рассматри-
ваемые нами в дальнейшем при опи-
сании графических операторов .
Следует заметить: если внутри ок-
рашиваемого контура расположена
замкнутая область, цвет границы ко-
торой равен номеру цвета параметра
С или С1, то она не закрашивается.
• ОПЕРАТОР CLS очищает экран.
Формат: CLS
Этот оператор окрашивает весь
экран в текущий цвет фона. Посред-
ством оператора CLS можно наибо-
лее быстро получить сплошной экран
любого цвета; его удобно использо-
вать для заливки нужным цветом
больших участков экрана.
• ОПЕРАТОР LOCATE передвигает
курсор на экране, высвечивая и пога-
шая его.
Формат: LOCATE X, У [,К],
где позиция X (столбец), на кото-
рой должен быть расположен кур-
сор, целое выражение, число из ин-
тервала (0,255);
позиция У (строка), на которой
должен быть расположен курсор,
целое выражение, число из интерва-
ла (0, 255);
К — целое выражение, указыва-
ющее, есть курсор на экране (К = 0)
или нет (К = 0); по умолчанию К = 0.
Этот оператор контролирует мес-
тоположение курсора на экране. При
генерировании текста на экране стол-
бцы нумеруются слева направо от 0
до 31, а строки — сверху вниз от 0
до 23. Курсор передвигается на по-
я
зицию, указанную в операторе
LOCATE. Этот оператор не влияет на
положение графического курсора;
понятие "позиция" (X, У) в операторе
LOCATE не адекватно понятию "коор-
дината" (X, У) в графических опера-
торах: если, например, позиция X = 35
(т.е. Х>31), то курсор установится в
столбце с номером 3 (35 — 32), на-
чиная с 0.
Работу операторов CLS и LOCATE
демонстрирует программа "Бегущая
строка" (листинг 1): здесь строка 50
задает невидимый курсор, указываю-
щий меняющиеся в циклах (строки
30, 40, 100, 110) положения X, У пер-
вой буквы слова "Эврика!", форми-
руемого на экране оператором PRINT
в строке 60. Оператор CLS в строке
90 стирает текущее слово (предыду-
щее), а цикл формирует следующее.
Шаг в каждом формирующем цикле
равен 1 (одной букве, знаку; в об-
щем случае его величина должна
быть не менее 1/256). В результате
создается впечатление движения сло-
ва по строке, а строки — по экрану.
Для замедления скорости этого дви-
жения (т.е. действия операторов в
строках программы) использован пу-
стой цикл (строки 70 и 80), единствен-
ное назначение которого — тянуть
время.
Листинг 1
10 REM "БЕГУЩАЯ СТРОКА"
20 CLS
30 FOR Y~5 ТО 15
40 FOR Х=0 ТО 31
50 LOCATE X,Y
60 PRINT "ЭВРИКА!"
70 FOR Т=1 ТО 3001 ПУСТОЙ ЦИКЛ
60 NEXT
90 CLS
100 NEXT
110 NEXT
Задание точек на экране
Операторы PSET и PRESET
В каждый момент времени одна
из текущих точек экрана любого рас-
трового дисплея, работающего в гра-
фическом режиме, будет выделен-
ной ("отработанная" точка); считают,
что в ней находится графический кур-
сор, который на экране не изобража-
ется и потому незаметен. В момент
входа в графический режим курсор
устанавливается в положение с коор-
динатами (0,0) — левый верхний
угол экрана.
• ОПЕРАТОР PSET генерирует (за-
жигает) точку на экране.
Формат: PSET (X, У) [,С] или PSET
STEP ( Д X, ДУ) [,С],
где: X, У — абсолютные коорди-
наты точки на экране;
Д X, ДУ — относительные ко-
ординаты точки;
С — номер цвета точки.
Координаты X и У определяются
как целые выражения (числа) в ин-
тервале (0, 255) и (0, 240) соответст-
венно. При значениях координат, вы-
ходящих за указанные пределы ра-
бочей области экрана, графические
элементы не высвечиваются или час-
тично отсекаются, программа про-
должает работать. Если выражения X,
У содержат нецелые числа, то в опе-
раторе PSEN происходит их округле-
ние до целого числа.
Относительные координаты АХ и
Д У также определяются как це-
лые выражения (числа); они задают
расстояние точки относительно теку-
щего положения графического кур-
сора (вдоль осей х и у), т.е. такие ко-
ординаты подсчитываются относи-
тельно последней точки, обработан-
ной графическими операторами. Это
расстояние является смещением, ша-
гом генерируемой точки. Параметры
шага положительны, если смещение
идет вправо-вниз, или отрицательны,
если смещение идет влево-вверх.
Номер цвета С — целое выраже-
ние, число из интервала (0,4). Если
номер цвета выходит за допустимые
пределы, то выдается сообщение об
ошибке 5. Если в операторе PSET па-
раметр С отсутствует, то по умолча-
нию точка окрашивается в текущий
цвет, определяемый оператором
COLOR (последним из встречающих-
ся в программе).
Иллюстрацией действия оператора
PSET служит программа "Пунктир-
ные линии" (листинг 2). Здесь по
умолчанию действует цветовой ре-
жим экрана COLOR 1,4 — красный
передний план (изображения) на чер-
ном фоне. Поэтому оператор PSET в
строке 30 зажигает красную точку,
заданную своими абсолютными коор-
динатами. Все последуающие опера-
торы PSET зажигают точки, определя-
емые их относительными координата-
ми — шагами, имеющими как поло-
жительные, так и отрицательные зна-
ки. Генерация точек идет в режиме
циклов, поэтому формируются раз-
ноцветные множества из точек (пунк-
тов) — пунктирные линии.
Листинг 2
10 REM "ПУНКТИРНЫЕ ЛИНИИ11
20 CLS
30 PSET (60,120)
40 FOR 1= 0 ТО 50
50 PSET STEP(1,0)f2
60 NEXT
70 FOR T =0 TO 30
60 PSET STEP <0,1>,3
90 NEXT
100 FOR J=0 TO 19
110 PSET STEP <3f3)
120 NEXT
130 FOR Q=0 TO 15
140 PSET STEP (3,-5),2
150 NEXT
160 FOR H=0 TO 5
170 PSET STEP (-10,0)
180 NEXT
190 FOR P—0 TO 200
200 PSET STEP (-1,0)
210 NEXT
# ОПЕРАТОР PRESET используется
для окрашивания точки на экране в
цвет фона, дает эффект гаше-
ния — стирания точки с экрана.
Формат: PRESET (Х,У) [,С] или
PRESET STEP (ДХ,АУ) [,С],
где X, У — абсолютные коорди-
наты точки на экране;
Д X, Д У — относительные коор-
динаты точки;
С — номер цвета точки.
При выполнении этого оператора
без параметра С соответствующая
точка (с координатами Х,У) окраши-
вается в цвет фона — стирается.
Если в операторе PRESET параметр
С присутствует, то действия операто-
ров PRESET и PSET одинаковы.
В программе "Парад звезд" (лис-
тинг 3) используются оба оператора:
PSET и PRESET. Первый оператор
(строка 60) зажигает разноцветные
точки-звезды с координатами X и У
(строки 30, 40) — случайными числа-
ми (RND), не превышающими соот-
ветствующих пределов (256, 240).
Второй оператор (строка 70) гасит
часть звезд — независимо от их цве-
та. Если удалить из программы стро-
ку 70, исчезнет с экрана фон — чер-
ное "небо" и картинку на экране
можно назвать по-другому: "Конфет-
ти", "Мозаика", "Ярмарка" и т.п.
Листинг 3
10 REM "ПАРАД ЗВЕЗД11
20 CLS
30 X=256*RND(1)
40 Y=240*RND<1)
50 C~RND< 1 >*4
60 PSET (X,Y)fС
70 PRESET <X-20,Y-30)
80 GOTO 30
Рассмотрим замечательные возмож-
ности оператора PSET, посредством
которого можно создавать библиоте-
ки интереснейших кривых линий. Бо-
гатство этих возможностей обуслов-
лено разрешением использовать вы-
ражения в качестве параметров X и
У. Например, в "Калейдоскопе кри-
вых" (см.листинг 4), каждая коорди-
ната точки в строке 100 вычисляется
как функция одного и того же пара-
метра (см. строки 70 — 90). В "Вол-
новом пакете" (см. листинг 5) одна
координата точки (строка 110) изме-
няется от 0 до 255 по закону, опре-
деляемому циклом в строке 60r а
вторая координата У вычисляется как
функция от параметра (строки 90, 70,
80). В этой же программе идет фор-
мирование второй кривой (в противо-
10 REM "КАЛЕЙДОСКОП КРИВЫХ"
20 CLS
30 INPUT А <А=1-6
40 INPUT Б 'В=1-6
50 INPUT С 1С=5-10
60 FOR 1=1 ТО 3600
70 2=6.2632*1/360
60 X=124+90*SIN(C*2)*COS(A*Z)
90 Y=I20+90*COS(C*Z> *SIN(B*Z>
100 PSET <X|Y>|2
110 NEXT
Листинг 5
10 REM "ДЕВЯТЫЙ ВАЛ"(ВОЛНОВОЙ
ПАКЕТ >
20 CLS
30 INPUT RrАМПЛИТУДА R=30-500
40 INPUT К 1 ЧИСЛО1 ПЕРИОДОВ K=5-15
50 INPUT S1 ШАГ S<=0.4
60 FOR X=0 TO 255 STEP S
70 Z=X~126
60 AL=K*Z*6.2632/256
90 Y=120-R*SIN(AL)/Z
100 W=120+R*SIN<AL)/Z
110 PSET (X,Y),2
120 PSET (X,W>
130 NEXT
фазе к первой) посредством второго
оператора PSET в строке 120. Анало-
гично генерируются "Трио синусоид"
и кривые Лиссажу" в листингах 6 и 7.
Построение отрезков прямых,
ломаных линий и прямоугольников
Оператор LINE генерирует на экране
отрезки прямых, прямоугольники
Формат: LINE (Х1, У1) — (Х2, У2)
1С] [,В] либо [,BF] или LINE STEP
( Д XI, А У1) -STEP (ДХ2,ДУ2)
[fC] [,BJ либо [,BF],
где Х1,У1; Х2, У2 — координаты
двух точек — концов отрезка;
С — номер цвета;
В — генерирует контур прямо-
угольника с координатами противопо-
ложных вершин XI, У1 и Х2, У2 цве-
та С;
10 REM ТРИО СИНУСОИД
20 INPUT R'ЯМГШИТУДЙ На0.1-0.5
30 INPUT К'ЧИСЛО ПЕРИОДОВ 2-10
40 INPUT 9* ШАГ 3=0,1-0,5
50 FOR Х=0 ТО 255 STEP S
60 AL=K*X*6.2Q/256
70 Y=124~R«X«SIN<AL)
60 А=85.3/К
90 В=170.б/К
100 PSET <ХД),1
110 PSET (X~A,Y),2
120 PSET (X~B,Y),3
130 NEXT
140 END
Листинг 7
10 REM "УЗОРЫ ЛИСС/ИУ"
20 CLS
30 INPUT R
40 INPUT К
50 INPUT Q
60 INPUT S
70 FOR X=0 TO 255 STEP 0.2
80 AL=6.2632*K*X/256
90 БТ=б.2632*0*Х/256
100 B=6.2832/S
110 Z=128+R*C0S(AL)
120 W=120+R*SIN(BT+B)
130 PSET (2,W),2
140 NEXT
стороны прямоугольника парал-
лельны краям экрана;
BF — генерирует контур прямо-
угольника (с указанными выше вер-
шинами) и заполняет его цветом С;
ДХ1,АУ1,АХ2ДУ2 — относительные
координаты точек — концов отрез-
ка.
Если в операторе LINE опущены
первые два параметра, то по умол-
чанию линия проводится из той точки,
в которой графический курсор нахо-
дился в предыдущий момент, т.е.
берутся координаты точки, заданные
в предыдущем графическом опера-
торе.
Если в операторе отсутствует пара-
метр С, то цвет сформированного
объекта по умолчанию соответствует
цвету переднего плана (изображе-
ния) в операторе COLOR (последнем
из встретившихся).
Чтобы стереть линию, надо прове-
сти ее еще раз, но уже цветом фона.
Если в этом операторе не указан
цвет (С), а параметр В (либо BF) при-
сутствует, то оператор должен иметь
вид
LINE (XI,Y1) — (X2,Y2), , В [BF].
В описываемой нами версии языка
_ ^цГ ____
БЕЙСИК при записи BF оператор LINE
не работает; для закрашивания пря-
моугольника надо использовать опе-
ратор PAINT, о котором шла речь ра-
нее.
Рассмотрим действие оператора
LINE. Программа "Рамка" формиру-
ет три разноцветных прямоугольника
(см. листинг 8, строка 40), координа-
ты двух вершин которых вычисляются
в зависимости от параметра С, меня-
ющегося в цикле от 1 до 3 (см. стро-
ка 30).
Листинг 8
10 CLS
20 КЕМ "РАННЯ"
30 FOR О 1 ТО 3
40 LINE (20+б*С.15+е*С>-
<240~6«СЛ5Й-6*С >. 4 - С. Б
50 NEXT
Программа "Цветовой ряд" (см.
листинг 9) формирует на экране 15
разноцветных (красный, зеленый, си-
ний) прямоугольников, отстоящих
друг от друга на расстоянии восьми
единиц и имеющих размеры сторон:
Листинг 9
4 -4 т-ir^M ni л и
Itf КС,П "ЦХЭСгШХЭиИ ГЛД
7/Л n? n
^ч) uLo
^ у» плчгчгп < г» л
i КО, 1 О> , ч
i Л П/*|Г> Т 4 нч/л Г*"
Г1Ж 1 = 1 1U о
ою run! 1 iU о
/I Г Г /* ТТЧ ГЛ+УУТ'+ГЛ /Г» i »•»/) >
ou) biiviu оir.r ^o^Aoie;-
ГИТ^УП / П i пл П ТП
■О 1 r,r IQ,1 ^ , U , JD
л A. t
/ w 1!г,л i с., i
8 и 130 экранных единиц (см. строка
60). Здесь в операторе LINE удобно
использовать относительные коорди-
наты.
Движение прямоугольника в про-
грамме "Бегущий прямоугольник"
(см. листинг 10) происходит благода-
ря прямоугольнику, формируемому
в строке 60, он конгруэнтен зелено-
му прямоугольнику, создаваемому
строкой 50, но# следуя за ним с не-
большим отставанием, гасит его сво-
им черным цветом — цветом фона.
Попробуйте посмотреть на экране
работу этой программы, введя стро-
ку 25 — COLOR 1,1.
Листинг 10
10 REM БЕГУЩИЙ ПРЯМОМ ГОЛ ЬИИК'!
20 CLS
30 LINE (1®»Бб>- С 53,5$> > 2 > В
/ Л Г -О, "ПУЛ П-Т'ГП •»
ЧУ rUJX Л = Ью 1U tolfcr 1
5G LINE <X450>-<X*I,e0>f2,B
/-•Л » firr / V rt r-i V 'J'"4 ПГЧ '
60 Li I Г1Г. V Л~Ц , ОФ -jy , О У 1 , '4 , JD
70 NEXT X
Используя оператор LINT, можно
получать красивые узоры и самые
разнообразные контуры, состоящие
из ломаных линий. Примеры таких
построений приведены в программах
"Математическое вышивание" (лис-
тинг 11 — в том листинге имеется
незнакомый пока что оператор, рису-
ющий эллипс в строке 151), "Звезда"
(листинг 12), "Правильный много-
угольник" (листинг 13).
Листинг 11
REM "МАТЕМАТИЧЕСКОЕ ВЫШИВАНИЕ
2& Х-50
30 У»-4<?
М FOR К=1 то t0
50 LINE <30fY)~<Xf19GD.2
60 Х=Х+2й
7& Y-YU5
№ NEXT
9d Х-Ж
Ш У=55
lid FOR 1,-1 ТО id
12Й LINE (X.
130 Х-Х+20
140 Y-Y+15
15'/i NEXT
151 CIRCLE (13®.115),25,3
152 PAINT (130.115)f3
16® FOR Q=fl TO 2
170 LINE <30-5*0.40-5*0)-
» 'I
(23GH 5* 0.19СИ 5*0). 3. Б
• • rik e ♦ *
ISO NEXT 0
a
Листинг 12
1 ГА рТГМ
■V 4. Aw * A W W fL^ Л ф.
2 G? CLS
4Г7 ГПY> T sztli TO c:
w v «4 W A.* "W 4 w w
/,ГЛ A — T * 1 1 A 1 A / 1 МГЗ»
• V" e A * dL • ■ r w m < A, w f Д. W
^tt Y П - 1 4f7i —Mr* 7 KUA^
W V V S Д. i" A W "V v - W .А. Л V "%♦*«"
^^ W Г Л ~ f ✓ А Л
W ч»' A > Ж О. -w Ж/ V W 1_- w V М А *
nOi MTTYT
Г х- * «A—J J* V АЬ
Р.Гл СОР — Сл ТП А
W A W АД. * A W
Of> i т кп? ^ y г ir v г* п —
W >w Лш* -а. • «• rf v % i v 9 а 4 11,^ И
( Y ( ЪГ л. 1 > V < Г 4ГП
4 ^ л • v ' а. ^ f « sat- U. /• /
1 СлСл bXVTYT
<*» П.- * * » * « L A
1 1 га t> A T ыт f «=; ч 1
•»• Л W « < 4 A « • A v w f V.1 ф Щ*.
Листинг 13
10 REM "ПРАВИЛЬНЫЙ МНОГОУГОЛЬНИК"
20 CLS
30 INPUT N
48 INPUT R
50 DIM XC16)
m DIM Y(16)
70 X(0)=126~R
№ Y<G>»120
90 FOR K=1 TO N
100 AL=6,2830*K/N
110 X(K)=126-R*C0S(AL)
120 Y(K)=128-R*SIN(AL)*1.33
130 LINE <X(K-1),Y(K-1))-(X(K),
Y(K>),2
140 NEXT
Тем читателям, которые захотят
сами придумать узоры и оригиналь-
ные конфигурации, рекомендуем
для подсчета координат использовать
бумагу в клеточку или миллиметров-
ку.
Построение окружностей, кругов,
эллипсов и их частей
Оператор CIRCLE
• Оператор CIRCLE формирует
окружности, эллипсы и их дуги.
Формат: CIRCLE [STEP] (X,Y), R [,C]
[,<*] IJB] [,E],
где X, У — абсолютные коорди-
наты центра окружности;
X, У — относительные координа-
ты центра окружности (А X, АУ), если
в операторе используется слово
STEP;
R — целое выражение, задаю-
щее радиус окружности;
С — целое выражение, задаю-
щее номер цвета окружности;
— арифметическое выраже-
ние, задающее положение начальной
точки дуги (в радианах);
fo - арифметическое выражение,
задающее положение конечной точки
дуги (в радианах);
Е — арифметическое выражение,
задающее эксцентриситет (коэффи-
циент сжатия-растяжения) эллипса.
При работе этого оператора на эк-
ран выводится лишь та часть окруж-
ности (эллипса), которая не выходит
за пределы координатной матрицы
экрана (0, 255; 0, 240). Значение па-
раметра Е должно лежать в преде-
лах: 2561/256. В нужных случа-
ях этот коэффициент подбирается
так, чтобы фигура максимально соот-
ветствовала окружности, т.е. если на
экране окружности недостаточно
"круглые", то изменяют значение па-
раметра Е. В нашем случае наиболее
подходит Е = 1,33.
Для стирания окружности надо
вычертить ее еще раз, но цветом
фона.
При наполнении оператора CIRCLE
без указания цвета на экран выводит-
ся окружность цвета переднего пла-
на, указанного в операторе COLOR
(последнем из встречающихся в про-
грамме).
После завершения работы опера-
тора CIRCLE графический курсор ус-
танавливается в центр окружности.
Внутреннюю область окружности
(эллипса) можно закрасить посредст-
вом оператора PRINT, получив круг
(заполненный эллипс).
Если в этом операторе не указы-
вают параметров С, , , но задают
параметр Е, то оператор следует за-
писывать так:
CIRCLE (X,Y),R„„E.
Если в операторе CIRCLE парамет-
ры и взяты со знаком минус, то
центр окружности соединяется с со-
ответствующими концами дуги, фор-
мируя радиусы. Знак минус на вели-
чину дуги никакого влияния не ока-
зывает.
Напомним, что отсчет положитель-
ных величин углов идет против часо-
вой стрелки от горизонтального луча,
направленного из центра окружности
направо.
Для устранения некоторой неод-
нозначности задания дуг в расширен-
ных версиях языка БЕЙСИК принято
такое соглашение: если считать, что
дуга всякий раз строится от меньшего
значения угла, заданного параметра-
ми или р до большего, то:
а) если она чертится про-
тив часовой стрелки;
б) если оL > fi , дуга чертится по
часовой стрелке.
При формировании эллипса пара-
метр Е определяется как отношение
вертикальной полуоси эллипса к го-
ризонтальной. Когда Е<1, длина го-
ризонтальной полуоси равна R, а дли-
на вертикальной полуоси равна R"E.
Когда Е> 1, наоборот, длина верти-
кальной полуоси равна R, а длина го-
ризонтальной полуоси равна R/E.
По умолчанию^параметр Е=1, а
параметры оС и fi равны 0 и 2*Р1
(6.263186).
Вместо значения дуги 0 в ряде
случаев лучше брать 0.001.
Оператор CIRCLE является пока
что единственным в MSX-БЕЙСИК,
позволяющим формировать кривые
линии без циклов.
Рассмотрим примеры использова-
ния и работы этого оператора. Две
программы "Окрашивание замкнуто-
го контура" (листинг 14) и "Круги и
эллипсы" (листинг 15) демонстрируют
работу оператора CIRCLE с различны-
ми вариантами задания координат
(абсолютных и относительных) цент-
ров окружностей (эллипсов), пара-
метра цвета и параметра Е.
Листинг 14
10 REM "ОКРАШИВАНИЕ ЗАМКНУТОГО
КОНТУРА и
20 CLS
30 CIRCLE (126,128),60
40 PAINT (126,128),3,1
50 LINE (200,10)-(245,230),2,Б
60 PAINT (220,20),,2
70 CIRCLE (.30,150) ,50,3, ,,2
80 PAINT (30,150),2,3
Листинг 15
10 REM "КРУГИ И ЭЛЛИПСЫ"
20 CL8
30 CIRCLE (128,120),20,2,,,1.3
40 PAINT (128,120),2
50 CIRCLE STEP (50,-50),
25 1 ^
w 9 l | f i • j
60 CIRCLE STEP (-60,-40),30,
3 1.2
70 CIRCLE~(60,180),40,3,,,1.3
80 PAINT (60,180),3
90 CIRCLE (210,190),30
100 PAINT (210,190),1
110 CIRCLE (40,70),30,,,,0.6
120 PAINT (40,70)
130 CIRCLE (135,200),20,2,,,3
140 PAINT (135,200),2
Программа "Светофор" (листинг
16) и только что названные две про-
граммы демонстрируют работу опе-
ратора PAINT, закрашивающего замк-
нутые области экрана (окружности,
эллипсы, прямоугольники).
Листинг 16
10 REM "СВЕТОФОР"
20 CLS
30 PSET (40,120)
40 FOR J=1 ТО 4
50 CIRCLE STEP (40,0),20,,,,1.33
60 NEXT
70 PSET (50,120)
80 FOR I-i TO 4
90 PAINT STEP (40,0),1,1
100 NEXT
В программе "Преследователь"
(листинг 17) вскрыта идея организа-
ции движения окружности по экра-
ну — за верхней зеленой окружно-
стью мчится (со сдвигом 5 единиц)
черная окружность-двойник (цвета
фона) и стирает следы первой ок-
ружности, создавая эффект движе-
ния (строка 40). А за нижней окруж-
ностью следует ее красный двойник
(строка 60), запечатлевая на экране
красивый орнамент-след.
Листинг 17
10 REM "ПРЕСЛЕДОВАТЕЛЬ"
20 CLS
25 FOR Х= 40 ТО 215 STEP 5
30 CIRCLE (X,80),40,2,,,1.3
40 CIRCLE (Х-5,80),40,4,,,
1.3'ДВОЙНИК
50 CIRCLE (X,180),40,2,,,1.3
60 CIRCLE (Х-5,180),40,,,,
1.3'ДВОЙНИК
120 NEXT
Программа "Деление круга" (лис-
тинг 18) позволяет разделить круг на
три разноцветных равных сектора;
деление осуществляют радиусы, по-
строенные операторами CIRCLE в
строках 30, 50, 70.
Листинг 18
10 REM "ДЕЛЕНИЕ КРУГА"
20 CLS
30 CIRCLE (128,128),80,,-3.14/6,
-3.14*5/6,1.3
40 PAINT (128,100)
50 CIRCLE (128,128),80,2,-3.14*
5/6,-4.65,1.3
60 PAINT (120,140),2
70 CIRCLE (128,128),80,3,-4.65,
-3.14/6,1.3
80 PAINT (140,140),3
В программе "Аксонометрия
фланца" обратите внимание на такую
хитрость: некоторые эллипсы не за-
мыкаются, давая тем самым залить
краске (строка 190) все необходимые
участки и сформировать наглядное
изображение средствами простой ба-
зовой графики (листинг 19).
Листинг 19
10 REM "АКСОНОМЕТРИЯ ФЛАНЦА"
20 Е=.58
30 CIRCLE (128,90).40.2,,,Е
40 CIRCLE (128,90).80,2,,дЕ
50 CIRCLE (128,100),60.2,3.14,
S.28.E
60 LINE (48,90)-(48.100 >.2
70 LINE (208,90)-(206.100),2
80 CIRCLE (64.90),12,2,,.E
90 CIRCLE (186,90),12,2,,,E
100 CIRCLE (128,90-60*E),12,
° ТГ
w « i «
110 CIRCLE (128,90+60*E),12,
о тг
« Ч Щ i—
120 CIRCLE (128.100).40,2,0.3.
14,E
130 CIRCLE (64,100).12,2,0.3.
14,E
140 CIRCLE (188,100),12,2,0,3.
14,E
150 CIRCLE (126.100-60*E).12.2,
0,3.14,E
160 CIRCLE (128,100-<-60*Е), 12,2,
0.2 .14,E
170 FOR Q=1 TO 1000
180 NEXT
190 PAINT (80.90).2
Описание графической информации
посредством оператора DRAW
В состав расширенного БЕИСИКа
включен оператор DRAW, реализую-
щий в пределах БЕЙСИКа простой
язык графической информации GML
(графический макроязык). Это ком-
пактный способ кодирования неслож-
ных фигур. С помощью этого опера-
тора изображенная на экране фигура
может быть увеличена (уменьшена) и
повернута. Следовательно, используя
этот оператор, можно производить
над геометрическими объектами
преобразования гомотетии, подобия,
симметрии, переноса, вращения и
т.п.
• Оператор DRAW выполняет
строки графических подкоманд.
Формат: DRAW "символьное вы-
ражение",
где символьное выраже-
ние — строка, содержащая графи-
ческие подкоманды.
Каждая подкоманда оператора со-
стоит из буквы, идентифицирующей
команду, за которой следует аргу-
мент (параметр). Аргументом может
быть целая константа или обращение
к индексной переменной.
На экране отображаются только те
значения аргументов, которые соот-
ветствуют координатам X и У точек в
интервалах (0,255) и (0,240) соответст-
венно.
В качестве разделителей между
подкомандами можно использовать
пробелы или точку с запятой, но их
может и не быть.
Группа подкоманд, обозначаемых
буквами R, F, D (см.рис.1), формиру-
ет отрезки прямых в одном из вось-
ми возможных направлений. Длина
отрезка может быть выражена чис-
лом, как, например, в программах
"Меандр" (см. листинг 20; строка 70)
или ''Орнамент "Хива" (см. листинг
10 REM "МЕАНДР"
20 CLS
30 FOR Т=1 ТО 3
40 COLOR Tt 4
50 FOR 1=1© ТО 216 STEP 40
60 FOR J-50 TO 200 STEP 45
70 DRAW e,86BM=I; f=J;
D14R14U6L6U6R14"
60 FOR Q= 1 TO 300
90 NEXT Q t J fIf T
100 END
21; строки 40 и 90), или индексной
переменной, как, например, в про-
грамме "Очерк консоли стойки" (лис-
тинг 22; строки 120, 130), Но чтобы в
строке подкоманд вместо числовой
константы использовать числовую пе-
ременную, надо перед именем этой
переменной поставить символ =, а
после имени — точку с запятой; ис-
пользуемые переменные должны
быть целого типа: Н = В%; R = A%;...
Это правило относится и к другим
подкомандам оператора DRAW.
Листинг 21
10 REM ОРНАМЕНТ "ХИВА"
20 FOR J-42TO160 STEP 36
30 FOR I=10TO216 STEP 36
40 DRAW el84BMsI;faJ;
E9R6E5F5R6F9G9L6G5H5L6H911
50 NEXT
60 NEXT
70 FOR K-60TO160 STEP 36
60 FOR A=26TO1Q0 STEP 36
E9R8E5F5R6F969L8G5H5L6H9"
90 DRAW "S4BM=A;f ~K;
100 NEXT
110 NEXT
Листинг 22
10 REM "ОЧЕРК КОНСОЛИ СТОПКИ"
20 CLS
30 X%=100
40 Y%=45
50 K=2
60 A%-60
70 B%=A%/2.5
60 C%=K*A%
90 D%=A%-B%
100 H%=C%+2*B%
110 PSET (X%fY%)
120 DRAW "S4 R-A%;D=B%;G=B%;"
130 DRAW HS4 D=C%;L=D%;U=H%;"
Подкоманда N вызывает возврат
графического курсора в текущую
точку после выполнения перемеще-
ния, заданного этой подкомандой:
NR3 NH7 N18...
Подкоманда Mr X, У или М [ ± ]
Л X,[±]AY чертит отрезок прямой
от текущей точки до точки с абсолют-
ными координатами X, У или до точ-
ки с относительными координатами
Д X, ДУ. Если перед первым ар-
гументом ( X) указан знак + или - ,
то знак перед вторым аргументом не
учитывается. На эту подкоманду не
действуют операции поворота и мас-
штабирования.
Подкоманда В "Поднятое перо"
указывает, что графический курсор
перемещается, но траекторию не вы-
свечивает. Индекс В записывают пе-
ред кодом перемещения: BD3
BR10... Нередко в программах ис-
пользуют сочетание подкоманд В и
М: ВМ = I; , = J;... ВМ = А;, =К;... (см.
строки 70 и 40, 90 в листингах 20 и 21
соответственно); это означает, что
графический курсор начинает вычер-
чивание фигуры с начальной точки,
координатами которой служат индек-
сные переменные I (А-..) и J (К...),
определяемые строками 50, 60 в
программе "Меандр" и строками 20,
30, 70, 80 в программе "Хива".
Подкоманда С задает номер цве-
та вычерчиваемой фигуры; номер
цвета определяет параметр — це-
лое выражение, число из интервала
(0, 4). Параметр цвета может быть
как целым числом: С2 (см. строку 80
в листинге 23), так и индексной пере-
менной: С = Т; (см. строки 70, 60, 40 в
листинге 23),
Подкоманда А "Поворот" изменя-
ет направление вычерчивания началь-
ной фигуры. Подкоманда записыва-
1С REM "ПОДОБИЕ И СИММЕТРИЯ"
20 CLS
ЗО А$ =
ME9R6E5F5R6F9G9L6G5H5L6H9"
40 FOR W=0 ТО 3
50 FOR Q=4 TO 10
60 T=W+l '
70 DRAW "C=T;A=W;S=0;BM126;,
124ХАФ;"
60 DRAW "C2; A3; S=Q; БМ126;,
12АХАФ;"
90 NEXT Q,W
100 END
ется: AT, где T — одно из четырех
возможных значений, кодирующих
угол поворота, согласно таблице:
Поворот осуществляется против
часовой стрелки вокруг точки, с кото-
рой начинается вычерчивание, и отно-
сится ко всем последующим переме-
щениям и проводимым линиям. По
умолчанию значение Т равно 0.
Параметр поворота задают индек-
сной переменной, например: А = W
(см.строки 70 и 40 в листинге 23).
Подкоманда S "Масштаб" изменя-
ет (задает) масштаб формируемого
изображения. Подкоманда записыва-
ется: SK# где К — параметр, реали-
зующий величину изображения; чис-
ло в пределах (1, 255). По умолча-
нию принимается значение К = 4, что
соответствует масштабу изображения
1:1. Масштаб изображения и пара-
метр К связаны соотношением
К = 4"М (см. таблицу).
Параметр К в подкоманде S мо-
жет быть выражен индексной пере-
менной: S = Q; (см. строки 70, 80, 50
в листинге 23, где индексная пере-
менная масштаба реализует преоб-
разование геометрии начальной фи-
гуры, заданной строкой 30).
Подкоманда X размещает началь-
ное изображение в заданном месте
экрана, организует компоновку фор-
мируемых геометрических объектов.
Подкоманде X предшествуют коор-
динаты (X, У) начальной точки (точки
привязки), в которую устанавливается
курсор (по команде ВМ) и начинает
вычерчивать изображение, определя-
емое символьной переменной АД
(А$). Имя этой символьной перемен-
ной ставится после подкоманды X;
подкоманда X включает подстроки
операторов, входящих в символьную
переменную А (А$). Использование
символьной переменной удобно, так
как освобождает составителя про-
граммы от повторения операций опи-
сания исходной фигуры.
В программе "Подобие и симмет-
рия" (листинг 23) дана иллюстрация
использования подкоманд поворота
(А), масштаба (S), установки привя-
зочной точки (X) начальной фигуры
Д# (А$) и других подкоманд опе-
ратора DRAW.
Нарушение допустимых пределов
значений параметров или неправиль-
ная запись подкоманд этого операто-
ра вызывает ошибку — 5.
Таким образом, оператор DRAW
имеет 15 подкоманд, из которых 9
непосредственно связаны с вычерчи-
ванием линий (R, F, D,.., М), а 6 под-
команд являются управляющими по
отношению к первым 9.
Заметим, что точкой привязки для
работы оператора DRAW может
быть либо точка, заданная операто-
ром PSET (Х,У) — см. строку 40 в
программе "Фронтальная аксономет-
рия" (листинг 24), либо точка, в кото-
рую устанавливается графический
курсор в последней (предыдущей)
графической команде (см.программу
"Чертеж модели", листинг 25).
Используя подкоманды базовой
графики ПЭВМ БК0010-01, можно со-
Листинг 24
10 REM "ФРОНТАЛЬНАЯ АКСОНОМЕТРИЯ
20 CIRCLE (100,130),10,2,3.14/2,
6.25
30 CIRCLE (140,90),10,2,3.14/2+
0.5,5.00
40 PSET (100.110)
50 DRAW "C2S4 D10E40U10640L20
Е40МБ2064 Ш 0K40U20L10E40R10
N640D20640"
60 PAIMT (115,100),2
70 PAINT (130,115),2
Листинг 25
10 REM "ЧЕРТЕ* МОДЕЛИ"
20 PSET (60,20)
30 DRAW "S4 R15D50R70 U20R30D20
R15D15L130U65LM152,50 D35bR
16U35BM145,50"
40 LINE -(74,20)
50 PAINT (70,40)
60 PAINT (160,80)
70 PSET (160,140)
60 CIRCLE STEP (0,0),8
90 CIRCLE STEP (0,0),15,,4.55,
1.60
100 CIRCLE STEP (0,0),30,,4.55,
1.60
110 DRAW "S4BU30L100D60R15NU60
R65BU45L15D30R15MJ25bL 15L.70
bD20R70"
120 LINE (42,10)-(205,190), 3,B
130 LINE (32,7)-(206,193),2,Б
здавать библиотеки различных шриф-
тов элементов чертежа, чертежи ти-
повых и нестандартных изделий, на-
глядные изображения несложных де-
талей (например, листинг 26), всевоз-
можные узоры и орнаменты.
Эти простые программы, оформ-
ленные в виде подпрограмм, обра-
зуют модули (элементы меню). Из
них можно, как из блоков, собирать
довольно сложные и интересные гра-
фические конструкции. Подобная ме-
тодика на более высоком уровне
(при программировании "сверху") ис-
пользуется в технических системах
САПР, в техническом дизайне.
Листинг 26
5 CLS
10 REM "КОМПЛЕКСНЫЙ ЧЕРТЕЖ И
АКСОНОМЕТРИЯ ДЕТАЛИ"
20 CIRCLE (80,110),20,2
30 CIRCLE (60,110),52,2,0,3.14
40 PSET (132,110),4
50 DRAW 11C2 84 D52R20D20L40U32
L64D32L40U20R20U52"
63 PSET (226,56),4
70 DRAW "C;2 S4 D124L56U124R56D
32L56D40R56D20L56"
80 PAINT (200,70),2
90 PAINT (200,140),2
10Q CIRCLE (130,30),20/4
110 CIRCLE (130,30),52/4,,0,3.
14
120 PSET (130+52/4,30)
130 DRAW "CI 81 D52E56NU52R20D
20G56U20NES6NL20D20L40U32L
6 4 D 3 2 N E 3 2 L 4 0 U 2 0 N E 2 0 R 2 0 U 5
140 A»INT(52*SIM(ATN(1)))
150 PRESET (130-А/4,30-A/4)
160 DRAW "CI SI E56"
170 B=INT(56/4 * S1N(ATN <1)))
180 СIRCLE (135+B,25-Б),52/4,,
0,-3/4*3.14
Эксперименты с графиками, чер-
тежами и орнаментами позволят чи-
тателю развить фантазию, художест-
венный вкус, логическое и простран-
ственное мышление, а также понять,
как работают профессиональные сис-
темы машинной графики.
Литература
1. Бдэнд Г. Основы программирования на
языке Бейсик в стандарте MSX. — М.: Фи-
нансы и статистика, 1989.
2. Знакомьтесь: Персональная ЭВМ КОР-
ВЕТ/С.А. Ахманов (мл.), И.Г. Персианцев,
А.Т.Рахимов и др. — M.: Наука, 1989.
3. Мичи Д., Джонстон Р. Компью-
тер — творец. М.: Мир, 1987.
4. Персональный компьютер в играх и за-
дачах/Г. Г.Гнездилова. — M.: Наука, 1988.
5. Хирн Д., Бейкер M. Микрокомпьютер-
ная графика. — M.: Мир, 1987.
6. Энджел И. Практическое введение в
машинную графику. М.: Радио и связь, 1984.