С. ЗИЛЬБЕРШТЕЙН

г. Киров

Графика в мировых координатах

Все как-то уже привыкли, что при работе с графикой на БК-0010, «Ямахе» или «Агате» мы имеем определённое количество точек на экране по вертикали и по горизонтали и что весь графический ввод-вывод привязан к этим точкам. Но ведь такая работа естественна и удобна только для ЭВМ! Точно так же как естественны и удобны для неё машинные коды.

Для человека же наиболее естественно считать, что каждая задача имеет свою собственную область отображения, размеры и единицы измерения которой определяются самой задачей, и что эта область может быть по желанию поставлена в соответствие любому участку экрана («окну»), в частности всему экрану. При этом во всех операторах графического ввода-вывода используются координаты в терминах самой задачи. Например, если мы строим график движения, где путь изменяется от 5,1 до 38,7 км, а время от 0 до 3,6 ч, то область задачи имеет именно эти размеры, а координаты X и Y задаются соответственно в километрах и часах; и если мы определим «окно» на экране, например, в верхнем правом углу, то график должен строиться именно в этой части экрана.

Во многих развитых версиях Бейсика такие возможности имеются. При этом координаты на экране называются абсолютными, а координаты в области задачи - мировыми. Ось Y в мировых координатах, в отличие от абсолютных, направлена «естественным» образом - вверх. Например, в Бейсике IBM PC оператор

WINDOW (X1,Y1)-(X2,Y2)

определяет в терминах задачи прямоугольник области задачи (задаются верхний левый и нижний правый углы), а оператор

VIEW (А1,В1)-(А2,В2)

определяет в терминах абсолютных координат «окно» на экране (так же задаются верхний левый и нижний правый углы), на которое будет отображаться область задачи.

Изменяя значения в операторе VIEW, можно сжимать, растягивать и перемещать «окно» (вместе с изображением) по экрану. Изменяя значения в операторе WINDOW, можно изменять масштаб изображения в одном и том же «окне».

Хотя в Бейсиках БК-0010, «Ямахи» и «Агата» аналогичных операторов нет, смоделировать их работу стандартными средствами не так уж сложно. Для этого нужно задать значения величин A1, В1, А2, В2 («окно» экрана), X1, Y1, Х2, Y2 (область задачи) и определить функции преобразования из мировых координат в абсолютные:

DEF FNX(Х)=(Х-X1)*K1+A1                                (1)
DEF FNY(Y)=(Y-Y1)*K2+B1

где К1 и К2 - постоянные коэффициенты:

К1=(А2-A1)/(Х2-X1)
К2=(В2-В1)/(Y2-Y1)

После задания функций преобразования (1) в операторах PSET, PRESET и LINE (для «Агата» - PLOT) можно использовать мировые координаты в виде (FNX(X), FNY(Y)).

Пример. Построить график функции Y = sin 2х, где х изменяется от -π до π, отображая область задачи (-3.5, 1.2) - (3.5,-1.2) на «окно» (50, 100) - (200, 160).

DATA 50,100,200,160,-3.5,1.2,3.5,-1.2
READ А1,В1,А2,В2,X1,Y1,Х2,Y2
К1=(А2-A1)/(Х2-X1)
К2=(В2-В1)/(Y2-Y1)
DEF FNX(X)=(X-X1)*K1+A1
DEF FNY(Y)=(Y-Y1)*K2+B1
REM ПОСТРОЕНИЕ ГРАФИКА
PSET (FNX(-PI),FNY(0)) ’НАЧАЛЬНАЯ ТОЧКА
FOR X=-PI TO PI STEP .05
LINE -(FNX(X),FNY(SIN(2*X)))
NEXT

Описанный способ достаточно прост и удобен, но обладает недостатком: если значения Y выходят за заданную область задачи (для некоторых функций, например Y= tg х, это будет всегда!), то график функции выходит за пределы «окна». Устранить этот недостаток можно так: определить ещё одну функцию

FNT(Y)=Y>=B1 AND Y<=B2                                (2)

принимающую значение «ложь», если Y выходит за пределы «окна», и выводить точку или отрезок только в том случае, если FNT (Y) есть «истина». Для предыдущего примера вместо оператора LINE... следовало бы записать оператор IF FNT(Y) THEN LINE...

Функции преобразования, аналогичные (1) и (2), можно определить и на Фокале БК-0010:

91.1 S &=(&-X1)*K1+A1;R
92.1 S &=(&-Y1)*K2+B1;R
93.1 S &=(&-B1)*(B2-&);R

где K1 и K2 - постоянные коэффициенты:

S К1=(А2-А1)/(Х2-Х1)
S K2=(B2-B1)/(Y2-Y1)

Мировые координаты в функциях Фокала FT и FV будут записываться в виде FSBR (91,X), FSBR(92,Y). Проверку на принадлежность к «окну» можно осуществлять с помощью функции FSBR(93,Y), которая должна быть неотрицательна.

Для Бейсика БК-0010 и «Ямахи», где в функциях FN допускается несколько аргументов, можно построить и более сложные функции преобразования, например функции, позволяющие кроме сжатия, растяжения и переноса изображения поворачивать его на заданный угол А вокруг левого угла «окна». Функции преобразования в этом случае выглядят так:

DEF FNX(X,Y)=((X-X1)*K1+(Y-Y1)*K2)*K5+A1
DEF FNY(X,Y)=-(Х-Х1)*K3+(Y-Y1)*K4+B1
DEF FNT(X,Y)=X>=X1 AND X<=X2 AND Y>=Y1 AND Y<=Y2

где K1-K5 - постоянные коэффициенты:

K1=(A2-A1)/(X2-X1)*COS(A)
K2=(B2-B1)/(Y2-Y1)*SIN(A)
K3=(A2-A1)/(X2-X1)*SIN(A)
K4=(B2-B1)/(Y2-Y1)*COS(A)
K5=((PEEK(32)AND1XOR1)+1)*0.72

Коэффициент K5 введён для устранения неравномерности графики по осям в БК-0010; в «Ямахе» он равен 1. Функция FNT контролирует нахождение точки в «окне» не только по Y, но и по X.

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


 

Отзовитесь, коллеги!

Хочу сообщить, что мной разработан для БК-0010 транслятор языка Си - вопреки сложившемуся мнению, что трансляторы языков такого класса могут быть реализованы лишь на гораздо более мощных компьютерах.

Транслятор воспринимает несколько урезанный вариант языка, вполне достаточный, однако, чтобы писать на нем достаточно серьёзные программы. Результатом работы являются не машинные коды, а текст на языке ассемблера МИКРО11. Это позволяет делать включения текста на ассемблере в текст программы на Си, однако, с другой стороны, причиняет некоторые неудобства в работе.

Разработка транслятора, на мой взгляд, открывает новый этап в программировании на БК. Становится возможным программировать на более высоком профессиональном уровне без применения кросс-ЭВМ, использовать один из наиболее популярных в мире языков программирования. Да и в обучении программированию можно будет перейти от убогих Бейсика и Фокала к Си - языку современному, реализующему практически все конструкции структурного программирования, языку для профессионального программирования и реализованному практически на всех ЭВМ более высокого класса.

В настоящее время я планирую работу по улучшению транслятора - генерацию непосредственно машинных кодов, разработку Турбо-версии, пополнение библиотеки подпрограмм.

Я слышал, что, кажется, в Саратове ведутся подобные разработки (трансляторы Си, Паскаля). Нет ли у вас какой-либо информации об этом? В любом случае, не могли бы вы сообщить мне адреса владельцев БК из Саратова, известные вам?

С уважением

А. В. Цаплев 199048, Ленинград, а/я 122

 


 

П. ГУЖА

Расширение возможностей КУВТ-86

Эксплуатация КУВТ-86 показала его достаточную эксплуатационную надёжность. Созданное для него в НИИФТТ ЛГУ им. П. Стучки программное обеспечение (система «Рига») позволяет использовать класс и новичку для освоения вычислительной техники и других учебных предметов, и программисту-разработчику учебных программ.

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

Автором разработан ряд аппаратных средств, позволяющих устранить перечисленные недостатки и получить качественно новые возможности как для всего класса КУВТ-86, так и для отдельных БК-0010.

Улучшение монитора БК-0010. В качестве монитора БК-0010 используется бытовой телевизор «Электроника-404». Традиционным является подключение выхода видеосигнала БК-0010 к видеовходу телевизора через конденсатор ёмкостью 5-50 мкФ. Качество изображения при этом получается не слишком высоким, что связано с ограниченной (около 6 МГц) полосой пропускания видеоусилителя и с тем, что видеосигнал БК-0010 имеет упрощенную форму по сравнению со стандартными. Последнее обстоятельство в случаях, когда на изображении преобладают светлые поля, часто вызывает срыв синхронизации. Увеличение уровня видеосигнала БК-0010 для получения устойчивой синхронизации приводит к дальнейшему ухудшению качества изображения.

Рис. 1

Предлагается видеоусилитель построить по ключевой схеме (рис. 1). При этом сокращаются фронты сигналов на его выходе. Желательно также включить потенциометр для подстройки уровня видеосигнала (контрастности) в зависимости от коэффициента усиления транзистора видеоусилителя и уровня сигнала от БК-0010. На селектор синхроимпульсов сигнал необходимо подать непосредственно, что обеспечивает высокую стабильность синхронизации.

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

Крепление ЭВМ пользователя. С целью повышения электробезопасности и улучшения внешнего вида рабочего места пользователя разработана конструкция, позволяющая объединить БК-0010, блок питания и телевизор в один узел.

Применение конструкции повышает надёжность рабочего места, исключая взаимные перемещения отдельных блоков и неизбежно связанное с этим дерганье разъёмных соединений.

Разработаны две модификации: для образца БК-0010 с плёночной и с кнопочной клавиатурами (рис. 2).

Рис. 2

Магнитофонный канал. О возможности связи отдельных БК-0010 по магнитофонному каналу уже сообщалось. Автором более детально исследованы возможности различных вариантов создания подобного канала. Наиболее целесообразными являются следующие: с помощью одного экранированного кабеля; с помощью двух экранированных кабелей.

Структурные схемы обоих вариантов показаны на рис. 3. Вариант с двумя кабелями безусловно лучше, однако в ряде случаев интерес представляет однокабельный вариант. Несмотря на то, что выходы в этом случае включены параллельно, можно передавать информацию между примерно пятью БК-0010.

Рис. 3

Система передачи изображений. Использование параллельно с КУВТ-86 традиционной школьной доски затруднительно, так как ученики в классе часто сидят спинами друг к другу и даже к преподавателю. Поле зрения ограничивают дисплеи, перегородки и т.п.

Применение кодоскопа требует затемнения помещения, невозможна также передача динамических изображений.

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

Рис. 4

Структурная схема системы передачи изображений ко всем рабочим местам КУВТ-86 показана на рис. 4. Она допускает следующие включения:

Передача на экраны сигнала от одной из ЭВМ (желательно от расположенной на рабочем месте учителя) задаётся положением переключателя К1. Применяется для коллективного просмотра листинга, данных или рабочей картинки, заданной учителем.

Передача на экраны сигнала от телевизионной камеры задаётся другим положением переключателя К1. Применяется для показа блок-схем программ, условий задач, фотографий и т.п.

Передача на экраны сигнала от ученической ЭВМ задаётся положением переключателя К2.

Performed by © gid, 2012-2022.