А.А.Павлова
Базовая графика версий
языка БЕЙСИК, близких к 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
70 FOR Т=1 ТО 3001 ПУСТОЙ ЦИКЛ
Задание точек на экране
Операторы 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 CLS30 PSET (60,120)
40 FOR 1= 0 ТО 50
50 PSET STEP(1,0)f2
60 NEXT70 FOR T =0 TO 30
60 PSET STEP <0,1>,3
90 NEXT100 FOR J=0 TO 19
110 PSET STEP <3f3)
120 NEXT130 FOR Q=0 TO 15
140 PSET STEP (3,-5),2
150 NEXT160 FOR H=0 TO 5
170 PSET STEP (-10,0)
180 NEXT190 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 CLS30 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 CLS30 INPUT А <А=1-6
40 INPUT Б 'В=1-6
50 INPUT С 1С=5-10
60 FOR 1=1 ТО 3600
70 2=6.2632*1/36060 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~12660 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 цве-
та С;20 INPUT R'ЯМГШИТУДЙ На0.1-0.5
30 INPUT К'ЧИСЛО ПЕРИОДОВ 2-10
Листинг 7
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
Программа "Цветовой ряд" (см.
листинг 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 CLS30 LINE (1®»Бб>- С 53,5$> > 2 > В
/ Л Г -О, "ПУЛ П-Т'ГП •»
ЧУ rUJX Л = Ью 1U tolfcr 1
/-•Л » firr / V rt r-i V 'J'"4 ПГЧ '
60 Li I Г1Г. V Л~Ц , ОФ -jy , О У 1 , '4 , JD
Используя оператор LINT, можно
получать красивые узоры и самые
разнообразные контуры, состоящие
из ломаных линий. Примеры таких
построений приведены в программах
"Математическое вышивание" (лис-
тинг 11 — в том листинге имеется
незнакомый пока что оператор, рису-
ющий эллипс в строке 151), "Звезда"
(листинг 12), "Правильный много-
угольник" (листинг 13).Листинг 11
REM "МАТЕМАТИЧЕСКОЕ ВЫШИВАНИЕ
2& Х-5030 У»-4<?
М FOR К=1 то t0
50 LINE <30fY)~<Xf19GD.2
60 Х=Х+2й
7& Y-YU5
№ NEXT
9d Х-Ж
Ш У=55lid FOR 1,-1 ТО id
12Й LINE (X.130 Х-Х+20
140 Y-Y+15
15'/i NEXT152 PAINT (130.115)f3
16® FOR Q=fl TO 2» 'I
• • rik e ♦ *
a
Листинг 12
1 ГА рТГМ
■V 4. Aw * A W W fL^ Л ф.
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 "ПРАВИЛЬНЫЙ МНОГОУГОЛЬНИК"
130 LINE <X(K-1),Y(K-1))-(X(K),
Тем читателям, которые захотят
сами придумать узоры и оригиналь-
ные конфигурации, рекомендуем
для подсчета координат использовать
бумагу в клеточку или миллиметров-
ку.Построение окружностей, кругов,
эллипсов и их частей• Оператор CIRCLE формирует
окружности, эллипсы и их дуги.Формат: CIRCLE [STEP] (X,Y), R [,C]
где 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 CLS30 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 CL830 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.270 CIRCLE~(60,180),40,3,,,1.3
80 PAINT (60,180),3
90 CIRCLE (210,190),30
110 CIRCLE (40,70),30,,,,0.6
130 CIRCLE (135,200),20,2,,,3
140 PAINT (135,200),2
Программа "Светофор" (листинг
16) и только что названные две про-
граммы демонстрируют работу опе-
ратора PAINT, закрашивающего замк-
нутые области экрана (окружности,
эллипсы, прямоугольники).Листинг 16
10 REM "СВЕТОФОР"
20 CLS30 PSET (40,120)
40 FOR J=1 ТО 450 CIRCLE STEP (40,0),20,,,,1.33
60 NEXT70 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 CLS25 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 CLS30 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 Е=.5830 CIRCLE (128,90).40.2,,,Е
40 CIRCLE (128,90).80,2,,дЕ
50 CIRCLE (128,100),60.2,3.14,
S.28.E60 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 «о тг
« Ч Щ i—
120 CIRCLE (128.100).40,2,0.3.
14,E130 CIRCLE (64,100).12,2,0.3.
14,E140 CIRCLE (188,100),12,2,0,3.
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Описание графической информации
посредством оператора DRAWВ состав расширенного БЕИСИКа
включен оператор DRAW, реализую-
щий в пределах БЕЙСИКа простой
язык графической информации GML
(графический макроязык). Это ком-
пактный способ кодирования неслож-
ных фигур. С помощью этого опера-
тора изображенная на экране фигура
может быть увеличена (уменьшена) и
повернута. Следовательно, используя
этот оператор, можно производить
над геометрическими объектами
преобразования гомотетии, подобия,
симметрии, переноса, вращения и
т.п.• Оператор DRAW выполняет
строки графических подкоманд.Формат: DRAW "символьное вы-
ражение",где символьное выраже-
ние — строка, содержащая графи-
ческие подкоманды.Каждая подкоманда оператора со-
стоит из буквы, идентифицирующей
команду, за которой следует аргу-
мент (параметр). Аргументом может
быть целая константа или обращение
к индексной переменной.На экране отображаются только те
значения аргументов, которые соот-
ветствуют координатам X и У точек в
интервалах (0,255) и (0,240) соответст-
венно.В качестве разделителей между
подкомандами можно использовать
пробелы или точку с запятой, но их
может и не быть.Группа подкоманд, обозначаемых
буквами R, F, D (см.рис.1), формиру-
ет отрезки прямых в одном из вось-
ми возможных направлений. Длина
отрезка может быть выражена чис-
лом, как, например, в программах
"Меандр" (см. листинг 20; строка 70)
или ''Орнамент "Хива" (см. листинг![]()
10 REM "МЕАНДР"
20 CLS30 FOR Т=1 ТО 3
40 COLOR Tt 450 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 END21; строки 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 NEXT70 FOR K-60TO160 STEP 36
60 FOR A=26TO1Q0 STEP 36E9R8E5F5R6F969L8G5H5L6H9"
90 DRAW "S4BM=A;f ~K;
100 NEXT
110 NEXTЛистинг 22
10 REM "ОЧЕРК КОНСОЛИ СТОПКИ"
20 CLS
30 X%=100
40 Y%=45
50 K=260 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),Подкоманда А "Поворот" изменя-
ет направление вычерчивания началь-
ной фигуры. Подкоманда записыва-40 FOR W=0 ТО 3
50 FOR Q=4 TO 10
60 T=W+l '124ХАФ;"
60 DRAW "C2; A3; S=Q; БМ126;,ется: 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),890 CIRCLE STEP (0,0),15,,4.55,
1.60100 CIRCLE STEP (0,0),30,,4.55,
1.60110 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 D52R20D20L40U32L64D32L40U20R20U52"
63 PSET (226,56),4
70 DRAW "C;2 S4 D124L56U124R56D32L56D40R56D20L56"
80 PAINT (200,70),2
90 PAINT (200,140),2
10Q CIRCLE (130,30),20/4
110 CIRCLE (130,30),52/4,,0,3.
14120 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.
-13.jpg)