Предлагаемый способ может оказаться удобен в том случае, если пользователь сам пишет программу для численного моделирования на каком-либо языке высокого уровня (C, PASCAL или FORTRAN) и с ее помощью формирует изображение на экране с использованием операторов типа "moveto", "lineto", рисования дуг и др. и при этом желает получить описание этого же изображения в виде PS-файла. В этом случае достаточно незначительно переделать текст исходной программы, дополнив его операторами записи в файл команд языка PostScript . Грубо говоря, после каждого оператора работы с графикой в исходной программе, надо вставить формирование аналогичного оператора на языке PostScript .
Поясним сказанное на простом примере. Пусть исходная программа,
написанная на языке C, формирует на экране с разрешением 640x350
схематичное изображение оси времени, а именно, рисует отрезок
прямой линии, исходящей из позиции с координатами (x1,y1)
, и
заканчивающейся в точке (x2,y2)
, а также подписывает ось буквой
"t" в позиции (x3,y3)
. Значения координат
x1
, y1
, x2
, y2
,
x3
, y3
вычисляются в исходной программе (мы предполагаем, что они оказались равными
x1=100
, x2=500
, x3=520
, y1=y2=y3=199
).
На рис. 2 приведены фрагменты текста исходной программы, причем выделены операторы, которые нужно вставить в программу для формирования PS-файла. Справа приведен текст формируемого исходной программой PS-файла, т.е. описания рисунка на языке PostScript .
Ниже еще раз приведен текст программы на языке PostScript с
соответствующими комментариями.
Комментарии в программе на языке PostScript начинаются со
знака %
. (Все, что следует за знаком %
в строке
PostScript -программы, интерпретатором игнорируется).
%!
% Специальная строка,
% с которой начинается программа.
%%BoundingBox: 0 0 639 349
% Специальный заголовочный комментарий,
% задающий координаты левого нижнего и
% правого верхнего угла
% в системе координат пользователя.
% Необходим для импорта PS-файла в LaTeX-документ.
/WL 1.1 def
% Присвоение значения переменной WL,
% определяющей толщину линии.
/SF 30 def
% Присвоение значения переменной SF,
% определяющей размер шрифта.
/Times-Roman findfont
% Установка отмасштабированного шрифта
SF scalefont setfont
% в качестве текущего шрифта, которым
% будет печататься текст.
/M {moveto} def
% Замена "длинного" оператора moveto
% буквой M для сокращения длины получаемого
% PS-файла (полезно, если этот файл
% будет содержать много операторов moveto).
newpath
% Объявление, что начато рисование новой
% траектории.
100 150 moveto
% Перенесение воображаемого пера
% в заданную точку.
500 150 lineto
% Добавление сегмента к текущей траектории.
WL setlinewidth
% Установка ширины линии.
stroke
% Рисование сконструированной траектории
% на текущей странице и очистка текущей траектории.
520 150 M
% Перемещение воображаемого пера
% в заданную точку.
(t) show
% Печать на текущей странице строки из стека.
showpage
% Вывод текущей страницы.
Подчеркнем, что при формировании описания страницы мы пользовались значениями координат точек, вычисляемыми в исходной программе для рисования на экране, т.е. дополнительной работы на это не требуется. Заметим только, что по умолчанию начало системы координат в PostScript считается расположенным в левом нижнем углу страницы (а в языке С при выводе на экран - в левом верхнем углу). Поэтому проводился элементарный пересчет координат для оси y.
Масштабирование рисунка при использовании PS-файла в LATEX-документе можно проводить командами LATEXa.
Если в ПП производится многократный вызов функций работы с
графикой, то модификация текста исходной программы сводится, в
основном, к написанию после каждого обращения к такой функции
соответствующего оператора fprintf
, который формирует аналогичный
оператор в программе на PostScript . Для уменьшения
громоздкости записи можно в исходной программе ввести несколько
вспомогательных функций так, чтобы, к примеру, действие оператора
fprintf(f,"%d %d moveto\n",x1,maxy-y1)
можно было заменить обращением к функции
mypsmoveto(f,x1,y1)
.
Полезно также иметь ввиду, что полученный
PS-файл можно вручную редактировать в любом текстовом
редакторе с целью изменения толщины линий, цветов, размера и вида
шрифта. Например, если требуется изменить толщину "оси времени" в
нашем примере, то достаточно в операторе /WL 1.1 def
заменить 1.1
на другое значение. Такое редактирование может быть
проведено в редакции журнала без участия автора статьи.
При использовании PCX- или BMP-файлов подобное редактирование
невозможно.
Ниже приведен пример иллюстрации, полученной
описанным здесь способом.
Исходный текст в формате PS.