01 (537404), страница 12
Текст из файла (страница 12)
Типовой алгоритм построения графического изображения на экране монитора должен включать следующие операции:
-
установка графического режима работы монитора;
-
задание базовой точки построения изображения;
-
построение изображения с помощью подпрограмм используемого пакета и вывод поясняющих текстов;
-
возврат к текстовому режиму перед завершением работы.
Все эти операции могут быть выполнены подпрограммами графического пакета Connell Scientific Graphics. К ним относятся следующие подпрограммы общего вида:
Init(Md) | – установка графического режима работы, где Md – номер режима. Рекомендуемое значение – 7. Это обеспечивает режим вывода информации 64048016; |
Finit() | – завершение работы в графическом режиме; |
Dcolor(Nc) | – установка цвета вывода изображения, где Nc – номер цвета; |
Moveab(Nx, Ny) | – установка базовой точки построения изображения, где Nx и Ny – экранные координаты точки; |
Drawab(Mx, My) | – построение линии из базовой точки в точку с экранными координатами Mx и My; |
Polyab(Nv, Pnt, Lp) | – построение многоугольника, где Nv - число его вершин; Pnt – массив экранных координат его вершин длиной 2. Nv, сформированный следующим образом: Pnt(1)=xэ1, Pnt(2)=yэ1 – первая вершина, Pnt(3)=xэ2, Pnt(4)=yэ2 – вторая и т.д.; Lp – параметр, указывающий на необходимость закрашивания многоугольника (0 – не закрашивать, 1 – закрашивать ранее установленным цветом). Эта подпрограмма может быть использована для построения ломаной линии. Для этого в массиве Pnt указываются координаты точек, через которые проходит ломаная, параметр Lp принимается равным нулю, и подпрограммой Moveab указывается базовая точка построения ломаной, в качестве которой берется первая ее точка с координатами (xэ1, yэ1). |
Patbcl(Ns) | – установка цвета фона символов при выводе текстовой информации. Ns – номер используемого цвета фона, если он требуется. При указании Ns = -1 текст наносится на существующий фон; |
Rectab(Nx, Ny, Mx, My, Lt) | – построение прямоугольника, где (Nx, Ny) и (Mx, My) – экранные координаты его левого верхнего и правого нижнего углов; Lt – признак закрашивания многоугольника (0 – не закрашивать, 1 – закрашивать ранее установленным цветом); |
Text('Str....', N) | – вывод на экран монитора первых N символов текста из символьной переменной или константы, начиная с базовой точки; |
Derase() | – очистка экрана; |
Flood(Ix, Iy) | – закрашивание области, ограниченной замкнутым контуром, установленным ранее цветом. Закрашиваемая область задается своей внутренней точкой с экранными координатами Ix и Iy; |
Setcur(Fn, Nx, Ny) | – установка курсора на экране монитора, где Fn – признак действия: Fn = 1 – установка; Fn = 0 – гашение. При Fn = 1 курсор устанавливается на экране в точке с экранными координатами Nx и Ny; |
Vwait(Nt) | – перевод программы в режим ожидания на Nt/18 секунд. |
***Замечание: формальные параметры вышеперечисленных подпрограмм Md, Nc, Nv, Nt, N и Pnt имеют тип Integer*2, параметры Lp и Lt - Logical, а остальные - Integer.
При выводе на экран монитора реальных изображений и графиков функций необходимо масштабировать их размеры с целью перевода их значений в экранные координаты и корректировать с учетом положения поля рисунка на экране. При этом необходимо учитывать, что ось ординат изображения y имеет противоположное направление экранной оси yэ. Если в системе координат (x, y) известно поле рисунка [xmin, xmax] и [ymin, ymax], то в первую очередь надо выбрать место его расположения на экране монитора в координатах (xэ, yэ), задав левую xэл и правую xэп, верхнюю yэв и нижнюю yэн границы, как это показано на рис.2 и 3 (xэп > xэл и yэн > yэв). При этом на экране монитора под рисунок будет отводиться nx = xэп - xэл пикселов по горизонтали и ny = yэн - yэв пикселов по вертикали.
Рис.2.
Рис.3.
После этого для пересчета реальных координат точек рисунка A(x, y) в экранные координаты Aэ(xэ, yэ) можно воспользоваться формулами
Приведенные выражения обеспечивают пропорциональное отображение поля рисунка с габаритами (xmax - xmin) на (ymax - ymin) единиц в экранное поле nx на ny пикселов. Так как для построения изображения требуется целая часть результата приведенных выражений, то для обеспечения математически строгого округления используется добавочный коэффициент 0,5. Но в целом данной поправкой можно пренебречь.
При оформлении разметки числовых осей графика функции требуется вывести на экран монитора шкалу изменения значений аргумента и функции. В данном случае значения шкалы обычно содержатся в числовых переменных, способов отображения значений которых в графическом режиме не существует. Требуется перевести числовые значения этих переменных в форму символьных констант и лишь затем вывести их на экран монитора. Для выполнения операции перевода чисел в форму символьных констант используется оператор Write в режиме работы с внутренним файлом. Под ним понимают некоторую символьную переменную, в которую оператор Write выводит значение числовой переменной в заданной форме. Например:
123456789.............................................................72 73......80
Character*4 Str
.................
Write(Str, 11) X
11 Format (F4.1)
Call Text(Str, 4)
.................
Работу в графическом режиме демонстрирует следующий пример: построить график функции y = (x - 1)2 + 4 для диапазона значений xmin = -1, xmax = 4.
На указанном отрезке значения функции меняются от 4 до 13. Поэтому для того, чтобы показать взаимное расположение графика функции и осей координат, следует выбрать поле рисунка с границами xmin = -1, xmax = 4, ymin = 0 и ymax = 13. Отображать это поле на экран монитора, который имеет 640 на 480 пикселов, удобно в прямоугольник nx = 400 на ny = 300 пикселов с границами xэл = 120, xэп = 520, yэв = 90 и yэн = 390. При этом на экране монитора останется свободное место под необходимые записи для пояснений. С учетом принятых граничных значений формулы пересчета реальных координат в экранные будут иметь вид:
При этом начало реальных координат (0,0) будет находиться на экране с координатами (200, 390). График функции строится в виде ломаной линии по 21-й точке с шагом 0,25 по длине отрезка [-1, 4]. Программа будет иметь вид:
123456789.................................................................72 73...80
Character*3 Str
Integer*2 Xe(42)
Integer Xe1, Xe2
Dimension Xr(2, 21)
Call Init(7)
C *** Установка фона, построение поля рисунка и осей коорд.***
Call Dcolor(15)
Call Rectab(0, 0, 639, 479, 1)
Call Dcolor(0)
Call Rectab(120, 90, 520, 390, 0)
Call Moveab(190, 390)
Call Drawab(190, 90)
Call Patbcl(-1)
Call Moveab(180, 94)
Call Text('Y',1)
Call Moveab(510, 374)
Call Text('X',1)
C *** Вычисление массивов значений аргумента и функции ***
Do 1 i = 1, 21
x = 0.25*(i - 1) - 1
Xr(1, i) = x
1 Xr(2, i) = (x - 1)**2 + 4
Do 2 i = 1, 21
Xe(2*i-1) = 200.5 + 80*Xr(1, i)
2 Xe(2*i) = 390.5 - 23.1*Xr(2, i)
C *** Построение графика функции ***
Xe1 = Xe(1)
Xe2 = Xe(2)
Call Moveab(Xe1, Xe2)
Call Polyab(21, Xe, 0)
C *** Разметка шкалы осей координат ***
Call Moveab(110, 394)
Call Text('-1', 2)
Call Moveab(185, 394)
Call Text('0',1)
Call Moveab(515, 394)
Call Text('4', 1)
Write(Str, 3) Xr(2, 21)
3 Format (F3.0)
Call Moveab(194, 94)
Call Text(Str, 3)
C *** Вывод подрисуночной надписи ***
Call Moveab(188, 420)
Call Text('График функции y = (x-1)(x-1) + 4.', 34)
C *** Организация задержки и окончание графического режима ***
Read (*,*)
Call Finit()
End
***Замечание: для того, чтобы зафиксировать изображение графика функции на экране монитора в программе используется оператор Read(*, *), который переводит ЭВМ в состояние ожидания ввода фиктивных данных. Продолжение работы программы возможно по нажатии клавиши "Enter".
Результаты работы программы представлены на рис.4.
Рис.4.
З а д а н и е к л а б о р а т о р н о й р а б о т е
Написать программу построения на экране графиков функций, описанных в вариантах задания к лабораторной работе № 2. Вывести на экран координатные оси с их обозначением и разметкой.
П Р И Л О Ж Е Н И Е
КРАТКИЙ ПЕРЕЧЕНЬ ОШИБОК ВЫПОЛНЕНИЯ ПРОГРАММЫ.
С о о б щ е н и я о п р о г р а м м н ы х п р е р ы в а н и я х