27. Суперкоманды

В данном разделе дана информация по использованию некоторых наиболее часто используемых суперкоманд. На самом деле суперкоманды не являются основным языком программирования. Это просто небольшие (или большие) процедуры, которые удобно использовать таким способом. Их может быть больше и каждый пользователь может добавлять новые. Каждая из них находится в отдельном файле в парке [proc] программы интерпретатора. Ниже показан список суперкоманд, разделенных на разделы и имеющих ссылку на основной текст описания. Для возврата к списку команд нажимайте клавишу [Home].

Содержание

Команды проверки работы программы при отладке
Команды графической среды общения с пользователем
Команды научных графиков
Команды вспомогательных расчетов
Команды некоторых математических расчетов
Команды анимации и другой работы с картинками
Модульные команды универсальной графики

Список команд

Команды проверки работы программы при отладке
ipar -- (init parameters) определение значений всех параметров
mp -- (message of printed) просмотр на экране текста, напечатнного в массив t()
scar -- (show complex array) график комплексной функции в массиве r()
sm -- (show memory) график части массива r()
spar -- (show parameters) вывод всех значений параметров в файл
sp -- (show point) сообщение о том, что программа прошла это место

Команды графической среды общения с пользователем
chva -- программа для выбора одного варианта из 99
rules -- программа универсальной формы информационной помощи
winid -- программа универсальной формы ввода входных данных
ssel -- программа вертикального фасонного меню
mess -- программа легкой подсказки в форме статусной строки
warn -- программа предупреждения о задержках
butt -- программа маленькой кнопочки [OK] для задержки программы
info -- программа показа картинки с текстом подсказки
inff -- программа общей подсказки, синий текст на коричневом фоне
idff -- простая программа ввода входных данных

Команды научных графиков
smau -- универсальная замена программе smasl, задает имя файла и имеет отказ от графика
smmх -- процедура карты почернения c разметкой осей и с размерами пикселя
sma -- окно законченного графика функций в массиве r() с аргументом
smas -- то же, что и sma, но размеры картинки можно варьировать
smasf -- то же, что и smas, но картинка записывается в файл без показа на экране
smasl -- то же, что и smas, но картинка имеет большую длину, но меньшую высоту
smap -- разновидность smau, в которой каждая точка рисуется одним пикселем экрана
smm -- процедура графика матрицы чисел в виде карты почернения с параметрами
smmu -- универсальная процедура карты почернения c 4 параметрами
smmup -- то же, что и smmu, но с указанием размеров пикселя
smmul -- то же, что и smmu, но с логарифмической шкалой
smq3d -- окно показа 2D функции в массиве r() как квази 3D графика

Команды вспомогательных расчетов
save -- команда копирования значений всех буквенных переменных в конец массива r()
rest -- команда копирования значений конца массива r() во все буквенные переменные
par -- команда задания стандартных параметров и выполнения стандартных расчетов
pard -- команда задания стандартных параметров для редактора текстов
cond -- команда разделения 9 разрядов переменной Q в переменные &1, ..., &9 слева направо
paax -- команда разметки числовой оси аргумента или функции на графике

Команды некоторых математических расчетов
fft1 -- программа одномерного преобразования Фурье
fft2 -- программа двумерного преобразования Фурье
conv1 -- программа свертки двух одномерных комплексных функций
conv2 -- программа свертки двух двумерных комплексных функций
smdep -- программа сглаживания функции зависимости методом суммирования по трем точкам.
imcg2 -- программа сглаживания картинки (2D массива) сверткой с функцией Гаусса
pwfs2 -- программа прохождения 2D волновой функции через пустое пространство
cfcm2 -- программа свертки двух комплексных функций двух аргументов (2D массивов) в памяти
prfr -- программа расчета пропагатора Френеля

Команды анимации и другой работы с картинками
mspic -- анимация по пронумерованным картинкам с масштабированием (новая)
animdep -- анимация по сечениям двумерного массива чисел (новая)
cedf - показ и конвертирование фрагмента edf файлов в jpg файлы
cedfint - конвертирование фрагмента edf файлов в dat файлы матриц в формате int

Модульные команды универсальной графики
area -- модуль произвольной области с границей в среде универсальной графики (новая)
arrow - модуль стрелки в среде универсальной графики (новая)
elli -- модуль эллипса с контуром в среде универсальной графики (новая)
egcl -- закрывает графику и записывает картинку в png файл (новая)
img -- модуль вставки картинки на слайд (новая)
linem -- модуль линии между двумя точками в среде универсальной графики
lines -- модуль многосегментной линии в среде универсальной графики (новая)
mline -- модуль многосегментной линии в среде универсальной графики
mtext -- модуль текста из многих строк в среде универсальной графики
pfeg -- модуль графика функции в массиве r() в среде универсальной графики
rectm -- модуль прямоугольной области с границей в среде универсальной графики
text -- модуль текстовой строки в среде универсальной графики
texts -- рисует текст из многих строк в среде универсальной графики (новая)

.

save -- команда копирования значений всех буквенных переменных в конец массива r()

Это очень простая команда, которая позволяет быстро сохранить значения всех переменных перед употреблением суперкоманды. Обычно многие суперкоманды сами ее содержат и переменнные сохраняют, но не все. Кроме того, иногда полезно сохранить переменные и в процессе счета по уникальному коду.

.

rest -- команда копирования значений конца массива r() во все буквенные переменные

Это очень простая команда, которая позволяет восстановить значения всех переменных после употребления суперкоманды. Обычно многие суперкоманды сами ее содержат и переменнные сохраняют, но не все. Кроме того, иногда полезно сохранить, а потом восстановить переменные и в процессе счета по уникальному коду. Используется после команды (save).

.

par -- команда задания стандартных параметров и выполнения стандартных расчетов

Это сборник разных комбинаций команд ACL для сокращения записи основной программы. Перед вызовом суперкоманды надо задать входные данные. Прежде всего номер комбинации определяется значением переменной &. В зависимости от номера могут быть другие входные параметры, что будет отмечено особо. Пока есть такие комбинации
(&=1) без допол. параметров, задаются стандартные параметры для команды редактора текстов. Выглядит это так
# &=1; ##par #f [file=name.txt;]
(&=2) без допол. параметров задаются стандартные параметры для суперкоманды ssel. Выглядит это так
# &=2; ##par #pr печать меню ##ssel
(&=3) вычисление квадрата модуля комплексной функции, 2 допол. параметра ( AZ -- начало записи КФ в массиве r(), BZ -- число комплексных чисел). Результат остается в r(), начиная с AZ, BZ реальных чисел. Выглядит это так
# &=3; AZ=?; BZ=?; ##par
(&=4) интерполяция одномерной функции, задаются 7 параметров в первых элементах массива r() параметры определяют (1) начало исходного массива (первый индекс в r()) (2)-(4) аргумент исходного массива (первое, последнее значения и число точек), (5)-(7) аргумент функции в результате интерполяции. Новая функция начинается там же, где была исходная, но имеет другое число точек. Выглядит это так
# &=4; #d 7 r(1) J x1 x2 n X1 X2 m ##par

.

pard -- команда задания стандартных параметров для редактора текстов

Это очень простая команда без параметров, которая просто задает стандартные параметры редактора текстов для экономии времени работы над программой. Она эквивалента предыдущей команде при &=1, но оставлена, так как была сделана раньше и кое-какие программы ее используют. Но больше лучше ей не пользоваться.

.

cond -- команда разделения 9 разрядов переменной Q в переменные &1, ..., &9 слева направо

Это очень простая команда без параметров, которая просто разделяет разряды переменной Q. При этом в одной переменной можно задать 9 переключателей режимов работы программы для экономии времени работы над программой.

.

paax -- команда разметки числовой оси аргумента или функции на графике

Некоторые программы научной графики сами размечают числовые оси аргумента или функции автоматически. Но есть другие программы, которые просят задать разметку осей. При этом обычно всегда известно или можно вычислить начало и конец оси. Данная команда по этим значениям, которые надо записать в начало массива r(), то есть в r(1) и r(2) сама вычисляет значение первой длинной риски, шаг до следующей длинной риски и число коротких рисок между ними в переменные r(3), r(4) и r(5). Потом эти значения можно переслать куда надо. Такой расчет не является простым и использование команды имеет смысл.

.

ipar -- (init parameters) определение значений всех параметров

Программа присваивает значение 1 всем числовым параметрам от номера 7 до номера 44, за исключением номера 36, для которого значение равно 100, и номера 41, для которого значение равно 0. Иногда это позволит быстро ликвидировать неприемлемые значения параметров в программе, которые могут возникнуть в результате ошибки.

.

mp -- (message of printed) просмотр на экране текста, напечатнного в массив t()

Эта программа состоит из одной команды, но печатать эту команду каждый раз отнимает много времени. Она показывает на экране окно сообщения, которое перед этим было напечатано в текстовый массив t(). Очень полезна при распечатке значений переменных в разных местах программы. Начиная с 23-07-2020 команду печати можно писать двумя буквами. Пример применения программы выглядит так
#pr \G a b c;\E ##mp

.

scar -- (show complex array) график комплексной функции в массиве r()

При работе с комплексными функциями результатом обычно является квадрат модуля этой функции. Однако, если программа работает неправильно бывает полезно посмотреть саму функцию. В ней каждая точка записывается парой чисел. Программа выделяет реальную и мнимую части в отдельные массивы, показывает две кривые на одном графике, а потом все возвращает на место. Она берет входные данные в виде трех чисел в переменных AZ, BZ и CZ. В первой переменной записывается начальный индекс массива r(), где записан массив комплексных чисел, во второй -- число комплексных точек. То есть число точек в каждой функции. В третьей переменной записана половина области изменения аргумента. Аргумент на графике выставляется в диапазоне (-CZ, CZ), он роли не играет, но так более привычно для пользователя. Вызов процедуры может выглядеть так
#d 3 AZ J N x0 ##scar

.

sm -- (show memory) график части массива r()

Программа показывает на графике значения части элементов числового массива r(). При этом номер первого элемента и число элементов надо задать в переменных A и B. Портит переменные A, B и C. Полезно в том случае, когда программа работает неправильно и надо понять содержание памяти.

.

spar -- (show parameters) вывод всех значений параметров в файл

Программа печатает значения всех числовых параметров от номера 7 до номера 44 в файл с названием (parval.txt) в рабочей папке программы. При неправильной работе программы это позволяет посмотреть какие значения параметры имеют в конкретном месте программы. Использует переменные s(3), j и параметры op, fir, n, file. и часть массива t() начиная с элемента 1998000.

.

sp -- (show point) сообщение о том, что программа прошла это место

Данная команда просто сообщает, что программа прошла это место. При наличии ошибок в программе непонятно как она работает. И куда заходит. Особенно это важно, когда программа зависает. Данная команда выставляет окно сообщения с текстом "I am here" и с указанием значения переменной %5, причем она автоматически увеличивает это значение на 1. Так что значение этой переменной можно либо определить перед вызовом, либо в самом начале. Работает только если переменная %4=1. То есть можно быстро отменить все такие команды, задавая другое значение.

.

mspic -- анимация по пронумерованным картинкам с масштабированием (новая)

Программа показывает анимацию по серии картинок, записаных в файлы в одной и той же папке и имеющих одно и то же расширение (jpg или png). Имена файлов должны иметь трехзначный номер перед точкой, в котором нули слева обязательны, а левые от номера символы должны быть одинаковыми для всех файлов, но произвольными по содержанию. Номера не обязательно начинаются от единицы, начальный и конечный номера являются входными параметрами задачи. Программа масштабирует картинки на лету на заданный размер. Переход между кадрами только один (мгновенный), а время паузы есть входной параметр. Итак, перед вызовом программы необходимо напечатать командой =pri три слова и 5 чисел. Пример вызова программы
#pri folder filename filemusic N1 N2 W H T \E ##mspic
Здесь folder -- имя папки с файлами картинок относительно папки интерпретатора, filename -- может быть именем первого файла с картинкой, но номер не важен, можно писать даже 000, filemusic -- имя файла с музыкой в формате midi, если музыка не нужна, надо писать nomusic, N1 -- начальный номер картинки для показа, N2 -- конечный номер картинки для показа, W -- ширина картинки в пикселях на экране, H -- высота картинки в пикселах на экране, T -- время паузы в миллисекундах. Замечу, что начальные размеры картинок не имеют значения, но их надо знать, чтобы правильно выставить аспектное отношение, если это необходимо, так как автоматически это не делается.
Обычно начальный номер меньше конечного, но это не обязательно, может быть наоборот. В любом случае процесс ижет от начального номера к конечному. Данная программа исходно запускается в режиме просмотра, то есть она показывает первый кадр и стоит. Поменять кадр можно нажимая клавишу пробела. При каждом нажатии кадр меняется на единицу. Чтобы запустить автоматическую анимацию надо нажать клавишу [Enter]. Тогда картинки меняются автоматически через указанную паузу. Переход к пошаговому просмотру снова по клавише пробела. По клавише [Esc] можно остановить анимацию и закрыть окно. То же самое делается при клике на крестик в правом верхнем углу окна, но это не так интересно. На клик мыши данная версия не реагирует. Программа портит переменную (%0).

.

animdep -- анимация по сечениям двумерного массива чисел (новая)

Программа показывает двумерный массив чисел, записанный в файл в формате float (4 байта на число) как анимацию, в которой сечения (кривые зависимости от первого аргумента) меняются со временем на одних и тех-же осях, либо увеличивая вторую координату, либо уменьшая ее. Перед запуском программы нужно задать значения параметров, которые она использует в работе. Такими значениями являются 16 чисел, которые должны быть записаны в массив r() начиная с первого элемента, то есть в r(1) ... r(16), и текстовая строка, которая должна быть напечатана командой #pri. Числовые значения имеют следующий смысл

1 -- Nx, число точек по горизонтали (в сечениях) двумерного массива
2 -- Ny, число точек по вертикали, то есть число сечений
3 -- x1, начальное значение первого аргумента
4 -- x2, конечное значение первого аргумента
5 -- xb, начальное значение на оси первого аргумента
6 -- xt, конечное значение на оси первого аргумента
7 -- xl, значение первой длинной риски на графике (горизонтальная ось)
8 -- dxl, шаг до следующей длинной риски
9 -- nxl, число коротких рисок между длинными
10 -- yb, начальное значение на оси функции (вертикальной)
11 -- ye, конечное значение на оси функции (вертикальной)
12 -- yl, значение первой длинной риски на графике (вертикальная ось)
13 -- dyl, шаг до следующей длинной риски
14 -- nyl, число коротких рисок между длинными
15 -- k, номер кривой, которая будет показана первой, начинается от 1.
16 -- i, индекс массива r(), где записаны кривые, если = 0, то чтение из файла.

Текстовый аргумент должен содержать два текста, разделенные символом вертикальной черты. Первый текст -- это имя файла с числами относительно папки той программы, которая использует суперкоманду. Файл используется если r(16)=0. Второй текст содержит начальную часть заголовка. К ней динамически прибавляется номер кривой и ее максимальное значение. Числа прочитываются из файла при условии, что параметр i (его номер 16) равен 0. Если он больше 0, то числа прочитываются из массива r(), начиная с индекса, на который указывает параметр.

Программа работает следующим образом: Сначала показывается кривая с номером, заданным входным параметром номер 15. После нажатия клавиши [Enter] номер кривой начинает увеличиваться с интервалом 0.3 секунды + время на создание самого графика. Если точек много, оно может быть заметным. Если нажать клавишу пробела (или любую другую из тех, которые ниже не указаны) то анимация останавливается. Повторное нажатие клавиши [Enter] снова ее запускает. При выходе за максимальное значение номера (Ny-1) он становится равным первому значению (0). То же самое происходит при нажатии клавиши [Backspace], только в это случае номер не увеличивается, а уменьшается, а при выходе за минимум (0) он становится максимальным (Ny-1).

Дополнительные операции. Если в процессе анимации нажать клавишу стрелки вправо, то анимация остановится. При повторном запуске анимации интервал времени между разными кривыми будет в два раза короче, то есть кривые будут сменятся быстрее. Если нажать клавишу стрелки влево, то все будет точно так же, только интервал будет в два раза длиннее. Эти процедуры можно повторять многократно постепенно увеличивая или уменьшая время паузы. Если нажать клавишу стрелки вверх, то показ остановится и программа попросит ввести номер кривой в окно ввода с двумя кнопками [OK] и [Cancel].

При выборе (клике) кнопки [OK] программа покажет кривую, номер которой ввел пльзователь, и на экране снова появится предложение ввести номер следующей кривой. Все окна появляются в центре экрана и окно ввода, вообще говоря, может мешать видеть кривую. Но любое окно можно передвинуть в любую часть экрана. Так окно анимации можно передвинуть в самом начале показа, если поставить курсор мыши на титульную строку и перетащить окно. Окно ввода можно перетаскивать в тот момент, когда оно появляется.

Процедура показа кривых по номеру повторяется каждый раз пока нажимается кнопка [OK]. Чтобы остановить этот процесс надо выбрать кнопку [Cancel]. Затем можно снова запускать анимацию. Анимация начнется с той кривой, которая показывалась последней. Она хороша для общего обзора и в презентациях. А просмотр кривых по номеру удобен при исследовании наиболее интересных участков.

Есть и возможность пошагового просмотра кривых. Для этого в самом начале надо нажать клавишу стрелки вниз. Программа покажет кривую с номером на 1 больше того, который показывался. Для сдвига номера дальше надо сначала нажать клавишу 0, а затем снова клавишу стрелки вниз. Такую процедуру можно повторять много раз. Комбинация с использованием всех клавиш дает много возможностей просмотра сечений. Программа удобна тем, что не требует создавать очень большое число рисунков с одной кривой в каждом сечении. Вполне достаточно иметь двумерный массив в одном файле.

Вот пример запуска суперкоманды
#d 16 r(1) 820 801 -0.6 0.6 -0.65 0.65 -0.5 0.25 4 -0.2 14.5 0 5 4 350 0 #pri 01-00-map.dat|Интенсивность\E ##animdep

.

fft1 -- программа одномерного преобразования Фурье

Программа вычисляет одномерное преобразование Фурье комплексной функции, представленной комплексным вектором размерности равной целой степени 2. Результат записывается вместо исходного вектора. Программа имеет два режима работы: стандартный и продвинутый. Режимы различаются значением переменной &, которая должна иметь значения 1 и 2 соответственно. В стандартном режиме образец вызова процедуры следующий
#d 4 AZ J n d -1 # &=1; ##fft1
То есть в переменные AZ, BZ, CZ, DZ надо задать значение индекса массива r(), начиная с которого записан комплексный вектор функции в виде r,i,r,i,...; число комплексных значений, оно должно быть равно целой степени 2, то есть 512, 1024 и так далее; шаг в прямом пространстве и знак преобразования (-1 для перехода из координатного пространства в импульсное и 1 для обратного перехода). В обоих случаях шаг задается в прямом пространстве, для обратного перехода он пересчитывается автоматически по формуле 2*пи/(d*n).
В продвинутом режиме образец вызова процедуры следующий
#d 5 AZ J n m d -1 # &=2; ##fft1
То есть надо вводить 5 параметров. После числа комплексных значений n вводится еще параметр расширителя сетки m, который тоже должен быть равен целой степени 2, например, 4, 16. При этом размер сетки становится равным n*m, но только центральные n значений занимает функция, остальные значения равны нулю. Удобство такого метода в том, что для функций типа функции Гаусса сами они и их фурье образы занимают только малую часть расчетной сетки. Если m = 4, то можно сделать шаг в 2 раза меньше и как функция, так и ее фурье образ юудут занимать в 2 раза больше центральных значений, но все равно мало по сравнению с центральными n точками. Для m = 16 шаг можно уменьшить в 4 раза. И так далее. Так получается при использовнии алгоритма FFT (быстрого преобразования Фурье) когда произведение шагов сетки равно dx*dq = 2*пи/N. Увеличивая N в 4 раза можно уменьшить шаги в 2 раза в обоих пространствах.
Программу при m = 1 удобно выделить отдельно, так как она быстрее работает и требует меньше ресурсов.

.

fft2 -- программа двумерного преобразования Фурье

Программа вычисляет двумерное преобразование Фурье комплексной функции, представленной комплексной матрицей размерности которой равны целой степени 2. Результат записывается вместо исходной матрицы. Программа имеет два режима работы: стандартный и продвинутый. Режимы различаются значением переменной &, которая должна иметь значения 1 и 2 соответственно. В стандартном режиме образец вызова процедуры следующий
#d 6 AZ J n1 d1 n2 d2 -1 # &=1; ##fft2
То есть в переменные AZ, BZ, CZ, DZ, EZ, FZ надо задать значение индекса массива r(), начиная с которого записана комплексная матрица функции в виде r,i,r,i,...; число комплексных значений по первой переменной, оно должно быть равно целой степени 2, то есть 512, 1024 и так далее; шаг первой переменной в прямом пространстве, число комплексных значений по второй переменной, оно должно быть равно целой степени 2, то есть 512, 1024 и так далее; шаг второй переменной в прямом пространстве и знак преобразования (-1 для перехода из координатного пространства в импульсное и 1 для обратного перехода). В обоих случаях шаг задается в прямом пространстве, для обратного перехода он пересчитывается автоматически по формуле 2*пи/(d*n).
В продвинутом режиме образец вызова процедуры следующий
#d 8 AZ J n1 m1 d1 n2 m2 d2 -1 # &=2; ##fft2
То есть надо вводить 8 параметров. После числа комплексных значений n по каждой переменной вводится еще параметр расширителя сетки m, который тоже должен быть равен целой степени 2, например, 4, 16. При этом размер сетки в одном измерении становится равным n*m, но только центральные n значений занимает функция, остальные значения равны нулю. Удобство такого метода в том, что для функций типа функции Гаусса сами они и их фурье образы занимают только малую часть расчетной сетки. Если m = 4, то можно сделать шаг в 2 раза меньше и как функция, так и ее фурье образ юудут занимать в 2 раза больше центральных значений, но все равно мало по сравнению с центральными n точками. Для m = 16 шаг можно уменьшить в 4 раза. И так далее. Так получается при использовнии алгоритма FFT (быстрого преобразования Фурье) когда произведение шагов сетки равно dx*dq = 2*пи/N. Увеличивая N в 4 раза можно уменьшить шаги в 2 раза в обоих пространствах.
Программу при m = 1 удобно выделить отдельно, так как она быстрее работает и требует меньше ресурсов.

.

conv1 - программа свертки двух одномерных комплексных функций

Программа вычисляет свертку двух 1D комплексных функций в памяти компьютера, точнее в реальном массиве r(). Обе функции должны быть записаны в массив r() в комплексном виде в форме r,i,r,i,... в произвольных местах, но с единственным условием, а именно, их массивы не должны перекрываться. Результат записывается на место первой функции, при этом обе исходные функции портятся. Расчет делается стандартным методом двойного преобразования Фурье с использованием суперкоманды fft1. То есть вычисляется фурье-образ первой функции в то же место, затем фурье-образ второй функции в то же место, затем функции перемножаются поэлементно на место первой функции, после чего вычисляется новая функция в исходном пространстве методом обратного преобразования Фурье в том же месте. Это и есть свертка -- результат выполнения суперкоманды. Входными данными программы являются сами массивы, а также переменные, начиная от AZ. При этом возможны 4 варианта расчета в зависимости от значения переменной & от 1 до 4: первые два -- нормальный и продвинутый соответствуют разным вариантам использования процедуры fft1. Образцы вызова процедуры выглядят так. Нормальный случай
#d 4 AZ J n d n2 # &=1; ##conv1
Здесь первые 3 аргумента такие же, как в fft1, 4-й определяет сдвиг начала второго массива относительно начала первого. Он должен быть больше или равен по модулю, чем n*2 и любого знака. Продвинутый случай
#d 5 AZ J n m d n2 # &=2; ##conv1
Здесь первые 4 аргумента такие же, как в fft1, 5-й такой же, как 4-й в предыдущем случае. Следующие 2 варианта вызываются точно также, только переменная & равна 3 и 4. Их отличие состоит в том, что фурье образ второй функции не вычисляется. Он должен быть вычислен заранее и находится на своем месте вместо исходной второй функции. Эти варианты удобны в том случае, когда вторая функция задана аналитически и аналитически же вычисляется ее фурье образ. Вычислять фурье образ по аналитической формуле может быть быстрее и проще.

.

conv2 - программа свертки двух двумерных комплексных функций

Программа вычисляет свертку двух 2D комплексных функций в памяти компьютера, точнее в реальном массиве r(). Обе функции должны быть записаны в массив r() в комплексном виде в форме r,i,r,i,... в произвольных местах, но с единственным условием, а именно, их массивы не должны перекрываться. Результат записывается на место первой функции, при этом обе исходные функции портятся. Расчет делается стандартным методом двойного преобразования Фурье с использованием суперкоманды fft2. То есть вычисляется фурье-образ первой функции в то же место, затем фурье-образ второй функции в то же место, затем функции перемножаются поэлементно на место первой функции, после чего вычисляется новая функция в исходном пространстве методом обратного преобразования Фурье в том же месте. Это и есть свертка -- результат выполнения суперкоманды. Входными данными программы являются сами массивы, а также переменные, начиная от AZ. При этом возможны 4 варианта расчета в зависимости от значения переменной & от 1 до 4: первые два -- нормальный и продвинутый соответствуют разным вариантам использования процедуры fft2. Образцы вызова процедуры выглядят так. Нормальный случай
#d 6 AZ J n1 d1 n2 d2 nn # &=1; ##conv2
Здесь первые 5 аргументов такие же, как в fft2, 6-й указывает на сдвиг начала второго массива относительно начала первого. Он должен быть больше или равен по модулю, чем n1*n2*2 и любого знака. Продвинутый случай
#d 8 AZ J n1 m1 d1 n2 m2 d2 nn # &=2; ##conv2
Здесь первые 7 аргументов такие же, как в fft2, 8-й такой же, как 6-й в предыдущем случае. Следующие 2 варианта вызываются точно также, только переменная & равна 3 и 4. Их отличие состоит в том, что фурье образ второй функции не вычисляется. Он должен быть вычислен заранее и находится на своем месте вместо исходной второй функции. Эти варианты удобны в том случае, когда вторая функция задана аналитически и аналитически же вычисляется ее фурье образ. Вычислять фурье образ по аналитической формуле может быть быстрее и проще.

.

smdep - программа сглаживания функции зависимости методом суммирования по трем точкам.

Программа сглаживает функцию методом локального суммирования по трем точкам, исходной с весом 0.5 и ближайших соседей с весом 0.25. Для достижения необходимого сглаживания процедура повторяется многократно. Она имеет параметры, а именно, A есть начальный индекс массива r(), где записана зависимость, B есть размер этого массива, H есть число суммирований +1, M есть максимальное значение в последней точке для получения одинаковой оси функций на графиках, S равно 1, если нужно показать графики, или 0 если не нужнo (они просто записываются в файл). Перед обращением надо напечатать имя файла без расширения для записи графиков. Исходная зависимость портится (заменяется на сглаженную), а также портятся еще два массива за исходным такой же размерности. Пример вызова программы
# A=J; B=N; H=51; S=0; M=r(A); #pri tfap\E ##smdep

.

imcg2 - программа сглаживания картинки (2D массива) сверткой с функцией Гаусса, использует FFT2

Эта программа делает то же самое, что и команда #ma [op=mcg;] в режиме свертки. Отличие в том, что команда использует дополнительные массивы, что при работе с очень большими массивами может вызвать авост по нехватке памяти, а эта программа использует основной массив r(). Программа вычисляет свертку 2D вещественной функции с функцией Гаусса, что часто используется при сглаживании картинок и учете пространственной когерентности в оптических расчетах. Результат записывается в то же самое место. Однако сразу за массивом 2D функции портится массив, размер которого в три раза превышает основной массив. В это место добавляется нулевая мнимая часть и вычисляется фурье-образ функции Гаусса. Расчет делается стандартным методом двойного преобразования Фурье. То есть вычисляется фурье-образ 2D функции, вычисляется фурье-образ функции Гаусса, они перемножаются, после чего вычисляется новая 2D функция в исходном пространстве методом обратного преобразования Фурье. Входными данными программы являются сам массив и переменные A-F. При этом A равно первому элементу массива r(), начиная с которого записана матрица 2D функции, B равно размеру матрицы по первому индексу (вдоль строк или оси Х), C равно размеру матрицы по второму индексу (вдоль колонок или оси Y), D равно физическому размеру квадратной ячейки, которая соответствует одному элементу матрицы, E равно параметру сигма-1 по первому измерению, F равно параметру сигма-2 по второму измерению. Все размерные параметры должны измеряться в одних и тех же единицах. Программа портит переменную o и последние 100 элементов массива r(), а также массив в 3 раза большего размера сразу за исходным. Для справок, полуширина функции Гаусса w = 2.355*сигма. Это соотношение можно использовать при вычислении параметров сигма. Пример вызова программы
#d 6 A J N1 N2 d s1 s2 ##imcg2

.

pwfs2 - программа прохождения 2D волновой функции через пустое пространство, использует FFT2

Программа вычисляет изменение 2D комплексной волновой функции при ее распространении в пустом пространстве вдоль оптической оси. Результат записывается в то же самое место. Однако такого же размера массив портится сразу за массивом волновой функции. В это место вычисляется фурье-образ пропагатора Кирхгофа. Расчет делается стандартным методом двойного преобразования Фурье. То есть вычисляется фурье-образ волновой функции, вычисляется фурье-образ пропагатора Кирхгофа, они перемножаются, после чего вычисляется новая волновая функция в исходном пространстве методом обратного преобразования Фурье. Входными данными программы являются сам массив и переменные A-F. При этом A равно первому элементу массива r(), начиная с которого записана матрица волновой функции, B равно размеру матрицы по первому индексу (вдоль строк или оси Х), C равно размеру матрицы по второму индексу (вдоль колонок или оси Y), D равно физическому размеру квадратной ячейки, которая соответствует одному элементу матрицы, E равно квадратному корню из произведения длины волны излучения на расстояние вдоль оптической оси, F -- это константа, которая вычитается из волновой функции до расчета и потом прибавляется к ответу. Может быть 1 или 0. Все размерные параметры должны измеряться в одних и тех же единицах. Программа портит переменную o и последние 100 элементов массива r(), а также массив такого же размера сразу за исходным. Пример вызова программы
#d 6 A J N1 N2 d 1 0 ##pwfs2

.

cfcm2 - программа свертки двух комплексных функций двух аргументов (2D массивов) в памяти, использует FFT2

Программа вычисляет свертку двух 2D комплексных функций в памяти компьютера, точнее в реальном массиве r(). Обе функции записаны в массив r() в комплексном виде одна за другой. Результат записывается на место первой функции, при этом обе исходные функции портится. Расчет делается стандартным методом двойного преобразования Фурье. То есть вычисляется фурье-образ первой функции в то же место, затем фурье-образ второй функции в то же место, затем функции перемножаются поэлементно, после чего вычисляется новая функция в исходном пространстве методом обратного преобразования Фурье. Это и есть свертка -- результат выполнения суперкоманды. Входными данными программы являются сами массивы и переменные A-D. При этом A равно первому элементу массива r(), начиная с которого записана матрица первой функции, B равно размеру матрицы по первому индексу (вдоль строк или оси Х), C равно размеру матрицы по второму индексу (вдоль колонок или оси Y), D равно шагу квадратной ячейки сетки, на которой вычислялись исходные комплексные функции. Программа портит переменную o и последние 100 элементов массива r(), а также массивы самих функций. Пример вызова программы
#d 4 A J N1 N2 d ##cfcm2

.

prfr -- программа расчета пропагатора Френеля

Программа вычисляет одномерный и двумерный пропагатор Френеля (ПФ) в прямом и обратном пространствах в зависимости от значения переменной &. При & = 1 вычисляется одномерный ПФ в прямом пространстве, при & = 2 вычисляется двумерный ПФ в прямом пространстве, при & = 3 и 4 вычисляется то же самое, но в обратном пространстве, однако шаг надо все равно задавать в прямом пространстве, в обратное пространство он пересчитывается автоматически. Вызов может иметь вид
#d 4 AZ J n d x0 # &=3; ##prfr
То есть в переменные начиная с AZ задаются начальный элемент массива r( ), куда записывается функция, число комплексных точек, шаг сетки, половина первой зоны Френеля sqr(wz), где w -- длина волны излучения в ангстремах, z -- расстояние в см. Нужно обратить внимание на недостаток параметров при расчете ПФ в обратном пространстве на расширенной сетке. При этом используется два числа n и m. Функцию надо определять на n точках, а шаг в обратном пространстве пропорционален 1/(n*m*d), где d -- шаг в прямом пространстве, который используется в расчетах. Поэтому для получения правильного шага в обратном пространстве надо задавать в CZ произведение m*d вместо d.

.

cedfint - конвертирование фрагмента edf файлов в dat файлы матриц в формате int

Программа выделяет из серии edf файлов, имена которых имеют числовые номера на конце, часть картинки и записывает пиксели картинки в dat файлы с теми же номерами в формате целых чисел int (4 байта на число) в компьютерном коде. Для ее использования надо задать входную информацию которая представляет собой три текста и 9 чисел. Тексты надо напечатать в текстовый массив, после каждого текста, включая последний, пробел обязателен. Вот пример: #pri task/snsp/es some000.edf some \E . Первый текст -- это указание на имя папки, где находятся все файлы. В имени не должно быть пробелов. Второй текст -- это полное имя edf файла, в котором перед точкой обязательно должны быть три нуля, а реальные файлы должны вместо нулей иметь номера. Снова пробелы запрещены. Третий текст -- это начало имени dat файла без номера и без расширения и снова без пробелов. Номера будут те же, что и у edf файлов, а расширение всегда dat, и оно подставляется автоматически. Вот пример задания числовых параметров. #d 9 i(1) L W H O N w h x y . Здесь вместо чисел условно стоят буквы, чуть чуть отражающие смысл числовых параметров. Более конкретно: L -- это длина шапки edf файла в байтах, ее можно получить как разность полного размера файла и размера картинки в байтах, который можно вычислить как произведение ширины W на высоту H, умноженное на 2. W -- ширина исходной картинки в пикселях. H -- высота исходной картинки в пикселях. O -- порядок байтов в 2-х байтовом представлении 16-тиричного числа, имеет два значения 0 -- LowByteSecond (младший байт второй) и 1 -- LowByteFirst (младший байт первый). N -- целое число, три старших разряда которого задают номер первого файла, а три младших разряда задают номер последнего файла. Нули слева можно не писать. w -- ширина фрагмента для записи в dat файл в пикселах. h -- высота фрагмента для записи в dat файл в пикселах. x, y -- координаты смещения левого верхнего угла фрагмента в пикселах, отсчет от нуля. Описанные 9 чисел надо записать в целый массив и значение первого индекса указать в параметре [n]. Вот полный пример вызова суперкоманды.
# s(3)=1; #pri task/snsp/Escan_1 escan_0000.edf esc_0 \E
#d 9 i(1) 2048 1376 1040 1 2003 1376 1040 0 0 #p [n=1;] ##cedfint

.

cedf - показ и конвертирование фрагмента edf файлов в jpg файлы

Программа может показать серию edf файлов, имена которых имеют числовые номера на конце, а также конвертирует в jpg файлы любой фрагмент из edf файлов. Для ее использования надо задать входную информацию которая представляет собой три текста и 13 чисел. Тексты надо напечатать в текстовый массив, после каждого текста, включая последний, пробел обязателен. Вот пример: #pri task/snsp/es some000.edf some \E . Первый текст -- это указание на имя папки, где находятся все файлы. Второй текст -- это полное имя edf файла, в котором перед точкой обязательно должны быть три нуля, а реальные файлы должны вместо нулей иметь номера. Третий текст -- это начало имени jpg файла без номера и без расширения. Номера будут те же, что и у edf файлов, а расширение всегда jpg и оно подставляется автоматически. Пробелы в именах запрещены. Вот пример задания числовых параметров. #d 13 i(1) M L W H O N w h x y S B T . Здесь вместо чисел условно стоят буквы, чуть чуть отражающие смысл числовых параметров. Более конкретно: M -- это модификация показа. Параметр имеет три значения 0 -- только показать, 1 -- показать и записать в файл, 2 -- только записать в файл без остановки работы программы. L -- это длина шапки edf файла в байтах, ее можно получить как разность полного размера файла и размера картинки в байтах. Более подробно написано в описании команды cedfint. W -- ширина исходной картинки в пикселях. H -- высота исходной картинки в пикселях. O -- порядок байтов в 2-х байтовом представлении 16-тиричного числа, имеет два значения 0 -- LowByteSecond (младший байт второй) и 1 -- LowByteFirst (младший байт первый). N -- целое число, три старших разряда которого задают номер первого файла, а три младших разряда задают номер последнего файла. Нули слева можно не писать. w -- ширина фрагмента для записи в jpg файл в пикселах. h -- высота фрагмента для записи в jpg файл в пикселах. x, y -- координаты смещения левого нижнего угла фрагмента в пикселах, отсчет от нуля. S -- стиль показа, это сложный параметр, у которого каждый разряд и знак имеет свое значение. Обычно контраст такой, что минимум черный, максимум белый. Но если знак отрицательный, то минимум белый, максимум черный. Младший разряд задает масштабирование: 1 - линейное, 2 - логарифмическое, 3 - квадратный корень. Обычно максимальное и минимальное значения вычисляются автоматически. Но если второй разряд 1, то они задаются в реальном массиве, начиная с индекса, на который указывается параметр [b]. Обычно B=0, T=99999. В этос случае на картинку попадает весь интеррвал изменения функции от минимального до максимального. Если B > 0, а T < 99999, то будет показан ограниченный интервал, в котором нижние и верхние уровни не будут иметь контраста. Описанные 13 чисел надо записать в целый массив и значение первого индекса указать в параметре [n]. Наконец, программа реагирует на значение параметра [par]. Если он равен 0, то картинка черно-белая, а если 1, 2 или 3, то цветная. Цветная картинка лучше всего выглядит при значении 3. Вот полный пример вызова суперкоманды для копирования.
# s(3)=1; #pri task/snsp/Escan_1 escan_0000.edf esc_0 \E #d 2 r(1) 0 1000
#d 13 i(1) 1 2048 1376 1040 1 2003 1376 1040 0 0 11 1 99999 #p [n=1; b=1; pa=3;] ##cedf

.

chva -- программа для выбора одного варианта из 99

Программа показывает таблицу из 99 кнопок для того, чтобы пользователь выбрал номер варианта из 99 возможных. После клика мыши, таблица закрывается, а параметр & равен номеру выбранной клавиши. Иногда вариантов может быть меньше, но такая стандартная форма удобна в любом случае. Те варианты, которых нет, можно просто не кликать, или при их клике запускается дежурный вариант.

.

rules -- программа универсальной формы информационной помощи

Данная программа является одним из вариантов предоставить пользователю информационную помощь. Она полностью выполняет работу по первой кнопке меню. Предполагается, что информация о программе записана в файле (rules.pdf) и файл находится в текущей рабочей папке программы. Программа показывает текст сообщения о том, что нужно прочитать этот файл и кнопку [OK]. Используется нарисованный текст и нарисованная кнопка такие же, как в командах info и butt. После клика кнопки программа организует bat файл с именем файла (rules.pdf) в указанной папке и запускает его. Файл показывается в дежурной программе показа pdf файлов. Без параметров.

.

winid -- программа универсальной формы ввода входных данных

Программа выставляет рамку, которая имеет некоторое количество строк с окнами ввода (справа) и с заголовском каждого окна (слева), а также 5 кнопок [OK], [Cancel], [Help], [Notes], [Save Var], [Choose Var]. Предполагается, что эта рамка пользволяет пользователю вводить входные данные в какую либо более сложную (БС) программу. Обычно эта БС программа как раз начинается с показа данной рамки. Для работы данной программы пользователь должен приготовить 4 файла в какой-либо папке внутри папки интерпретатора ACL. В первом файле (назовем его tin) должны быть записаны все подписи (заголовки) все окон ввода для БС программы, каждый заголовок заканчивается символом вертикальной черты, включая последний. Во втором файле (назовем его par) в первой строке должен быть записан заголовок рамки, во второй строке -- значения параметров для каждого окна, каждое значение заканчивается символом вертикальной черты. Это могут быть как тексты, так и численные значения. Следующие 99 строк должны содержать копии второй строки или ее варианты, то есть значения входных данных для других вариантов. Третий файл (назовем его inf) должен содержать описание БС программы в любой форме. Четвертый файл (назовем его txt) может быть пустым, но лучше набить приглашение писать текст. Перед вызовом суперкоманды необходимо определить параметр L (он означает ширину рамки в пикселах) и напечатать 5 названий, каждое из которых заканчивается символом вертикальной черты. Эти названия означают имя папки, где находятся описаннные выше файлы, а также их имена в указанной выше последовательности. Нужно также отметить, что перед вызовом данной программы сама БС программа должна быть написана как процедура с названием genp. Вот пример вызова

#pro genp
команды БС программы
@
# s(3)=1; L=140; #pri pro/3|a01.tin|a01.par|a01.inf|a01.txt| \E  ##winid  #%  

.

ssel -- программа вертикального фасонного меню

Программа выставляет окно без рамки, на котором написан заголовок и нарисованы кнопки меню. Перед вызовом программы необходимо задать ее параметры, а именно в переменных X и Y - координаты левого верхнего угла окна, W и H - ширина и высота одной кнопки меню, K - тип текста, может принимать 4 значения: 0 - простой, 1 - жирный, 2 - наклонный и 3 - жирный-наклонный. Необходимо задать первые 5 элементов таблицы цветов. 1-й цвет для фона, 2-й цвет для заголовка, 3-й цвет для имен кнопок меню, 4 и 5 цвета - для градиента цвета, которым рисуются кнопки меню. Если число кнопок n то необходимо напечатать n+2 текстов, разделенных вертикальной чертой по образцу #pri title|first|second|...|Font|\E . Здесь первый текст - заголовок, следующие - названия кнопок меню, последний текст - имя фонта, который будет использоваться для написания кнопок. Необходимо сделать проверку на наличие фонта и если он отсутсвует на компьютере, то предложить альтернативные варианты. Тексты на кнопках выставляются, начиная слева от поля кнопки, а справа указывается название клавиши, которую надо нажать, чтобы выбрать данную кнопку. Порядок клавиш фиксирован: сначала от 1 до 9, затем 0, затем буквы от A до Z. Другие клавиши не используются. После того, как окно выставлено, программа ждет от пользователя выбора кнопки. Выбирать можно кликом мышки на соответствующей кнопке меню или нажимая клавиши, указанные справа. Если нажата правильная клавиша, то она имеет приоритет. После этого окно закрывается автоматически, а выбранный номер возвращается в переменную &. Вот возможный шаблон кода, использующий программу

# &=1; 
#case 1  #p [fk=3; fs=16; em=0;]  # X=10; Y=30; W=350; H=30; K=0; s(3)=1;
 #d 15 i(1) 200 180 160 0 0 0 0 0 200 200 255 200 60 120 100    #col [fir=i(1); b=1; le=5;]
 #pri Select what to do|Game rules (read first)|Two|Three|Four|Five|Six|Seven|Eight|Nine|Exit|Comic Sans MS|\E
 ##ssel    # &9=&; &0=10;
 #e [c=1;] 0001 #e [c=2;] 0002 #e [c=3;] 0003 #e [c=4;] 0004 #e [c=5;] 0005 #e [c=6;] 0006 #e [c=7;] 0007 #e [c=8;] 0008 #e [c=9;] 0009  
 # &=(&0-&9)<1;
#end

.

mess - программа легкой подсказки в форме статусной строки

Программа выставляет стандартное окно в нижней строке экрана как раз над статусной строкой Виндовс с текстом в одну строку. Текст должен быть напечатан перед ее вызовом командой #pri text\E. Ее основное назначение - сообщить пользователю о необходимых действиях во время ожидания от него каких-либо действий. Это очень простая и легкая форма, которая сделана так, чтобы не занимать экран. После того как действие сделано необходимо закрыть окно командой #fr [op=c; mo=1;].

.

warn - программа предупреждения о задержках

Программа выставляет стандартное окно посередине экрана с текстом в одну строку. Текст должен быть напечатан перед ее вызовом командой #pri text\E. Ее основное назначение - сообщить пользователю о возможной задержке в работе в связи с необходимостью какое-то время потратить на расчеты. Это очень простая и легкая форма. После того как расчет закончен необходимо закрыть окно командой #fr [op=c; mo=1;]. Есть конечно возможность выставлять более сложное окно, показывающее мониторинг выполнения расчетов. Но если время ожидания не очень большое, то такая форма намного проще.

.

butt - программа маленькой кнопочки [OK] для задержки программы

Программа рисует на экране маленькую кнопочку с названием OK и ждет пока пользователь кликнет эту кнопочку. Это бывает необходимо, когда надо задержать выполнение программы, до тех пор пока пользователь не разрешит ее продолжить. Эту суперкоманду (СК) можно использовать в паре с СК inff, которая выставляет окно с информацией без задержки программы. Наверняка у нее найдутся и другие применения. Перед вызовом программы необходимо в переменных X и Y определить координаты левого нижнего угла кнопочки.

.

info - программа показа картинки с текстом подсказки

Программа используется для показа на экране разного рода информационных текстовых сообщений стандартного вида. Стандартными являются цвет текста (синий) и фона (светлокоричневый), размер (22) и тип (простой) текста. Фон высвечивается в области с размерами W и H и с координатами левого верхнего угла X и Y. Переменная N2 задает номер картинки для внутренней передачи из графики в окно. Ее значение может быть от 1 до 100. Имеются две модификации, которые задаются переменной M. Если M = 0, то текст берется из последней печати командой #pri, при этом признаки конца строки учитываются естественным образом. Если M = 1, то из последней печати берется имя файла и текст берется из этого файла начиная с N1-й строки и всего N строк. Этот режим могу использовать только я. Список всех используемых переменных: f1,f2,H,J,M,N,N1,N2,W,X,y,Y. Программа открывает окно на неограниченное время. Окно надо закрывать командой #fr [op=c; mo=1;] когда это необходимо. Закрыть окно вручную невозможно, поэтому будьте аккуратны. Переменные не сохраняются, так что об этом должен заботиться пользователь.

.

inff - подсказки, синий текст на коричневом фоне

Программа является более старой версией предыдущей программы. Она отличается от нее только размером текста 14 вместо 22. Все остальное точно так же.

.

idff - простая программа ввода входных данных

Программа выполняет интерактивный ввод входных данных в любую ACL программу в упрощенном режиме. А именно она показывает содержимое файла, имя которого должно быть предварительно напечатано командой pri. В этом файле должно быть A строк (A может быть равно 0) с двумя числами на каждой строке, остальная часть строки произвольная, в ней могут быть комментарии, B строк (B может быть равно 0) с текстовыми параметрами, по одному параметру без пробелов на каждой строке, остальная часть через пробел может быть использована для комментариев. Остальные строки файла могут быть использованы как описание программы. Также необходимо задать число C как начальный индекс текстового массива, куда будут записаны текстовые комментарии. Итак, на входе: напечатанное название файла, A -- число строк с числовыми параметрами (два параметра на строку), B -- число текстовых параметров, C -- начальный индекс для записи текстовых параметров. На выходе: числовые параметры в первых элементах массива r(), сразу на ними длины текстовых параметров, и текстовые параметры в указанном месте массива t(). Пример использования суперкоманды для копирования
# s(3)=1; #pri idfile.ini\E #d 3 A 5 1 1 ##idff

.

sma - окно законченного графика функций в массиве r() с аргументом

Программа показывает стандартный график функций, значения которых вычислены в массиве r() на постоянной сетке аргумента. Все параметры заданы, кроме 6 параметров, которые следует записать в переменные, а именно, A = начальный индекс массива r(), где записаны функции, B = число точек аргумента, C = число функций, D = минимальное значение аргумента, E = максимальное значение аргумента, F = номер цвета, которым будет нарисована первая кривая, остальные будут иметь номера сдвинутые каждый раз на единицу. Кроме того, необходимо напечатать заголовок графика командой #pri .\E Размер картинки 880*600. Картинка автоматически спасается в файл с именем sma.png. Пример вызова:
# A=1; B=101; C=1; D=-1; E=1; F=247; #pri Figure/E ##sma

.

smas - окно законченного графика функций в массиве r() с аргументом

Программа показывает стандартный график функций, значения которых вычислены в массиве r() на постоянной сетке аргумента. Все параметры заданы, кроме 7 параметров, которые следует записать в переменные, а именно, A = начальный индекс массива r(), где записаны функции, B = число точек аргумента, C = число функций, D = минимальное значение аргумента, E = максимальное значение аргумента, F = номер цвета, которым будет нарисована первая кривая, остальные будут иметь номера сдвинутые каждый раз на единицу, G = масштабирующий множитель размера рисунка на экране. Кроме того, необходимо напечатать заголовок графика командой #pri .\E Размер картинки 880*600 если G = 1. Изменяя параметр G можно получить картинку любого размера. Картинка автоматически спасается в файл с именем smas.png. Пример вызова:
# A=1; B=101; C=1; D=-1; E=1; F=247; G=0.5; #pri Figure/E ##smas

.

smasf - окно законченного графика функций в массиве r() с аргументом

Программа создает стандартный график функций, значения которых вычислены в массиве r() на постоянной сетке аргумента. Все параметры заданы, кроме 7 параметров, которые следует записать в переменные, а именно, A = начальный индекс массива r(), где записаны функции, B = число точек аргумента, C = число функций, D = минимальное значение аргумента, E = максимальное значение аргумента, F = номер цвета, которым будет нарисована первая кривая, остальные будут иметь номера сдвинутые каждый раз на единицу, G = масштабирующий множитель размера рисунка на экране. Кроме того, необходимо напечатать заголовок графика командой #pri .\E Размер картинки 880*600 если G = 1. Изменяя параметр G можно получить картинку любого размера. Картинка автоматически спасается в файл с именем, которое задается параметром [form=...;] и с расширением png, но не показывается на экране. Это удобно при записи картинок в цикле при автономной работе программы. Пример вызова:
# A=1; B=101; C=1; D=-1; E=1; F=247; G=0.5; #p [form=\u115;\I-2 k;\E] #pri Figure/E ##smasf

.

smasl - окно законченного графика функций в массиве r() с аргументом

Программа показывает стандартный график функций, значения которых вычислены в массиве r() на постоянной сетке аргумента. Все параметры заданы, кроме 7 параметров, которые следует записать в переменные, а именно, A = начальный индекс массива r(), где записаны функции, B = число точек аргумента, C = число функций, D = минимальное значение аргумента, E = максимальное значение аргумента, F = номер цвета, которым будет нарисована первая кривая, остальные будут иметь номера сдвинутые каждый раз на единицу, G = масштабирующий множитель размера рисунка на экране. Кроме того, необходимо напечатать заголовок графика командой #pri .\E Размер картинки 980*500 если G = 1. Изменяя параметр G можно получить картинку любого размера. Картинка автоматически спасается в файл с именем smasl.png. Пример вызова:
# A=1; B=101; C=1; D=-1; E=1; F=247; G=0.5; #pri Figure\E ##smasl

.

smau - окно законченного графика функций в массиве r() с аргументом

Программа показывает стандартный график функций, значения которых вычислены в массиве r() на постоянной сетке аргумента. Все параметры заданы, кроме 7 параметров, которые следует записать в переменные, а именно, A = начальный индекс массива r(), где записаны функции, B = число точек аргумента, C = число функций, D = минимальное значение аргумента, E = максимальное значение аргумента, F = номер цвета, которым будет нарисована первая кривая, остальные будут иметь номера сдвинутые каждый раз на единицу, G = составное целое число из 4 разрядов. Четвертый разряд указывает на показ графика, 0 - не показывать, 1 -показывать с остановкой работы программы. Три младшие разряда задают коэффициент масштабирования графика в процентах, то есть 100 означает без масштабирования. Стандартное значение G=1100; Кроме этого, перед вызовом программы необходимо напечатать два текста, разделенные символом вертикальной черты '|'. Первый текст определяет имя файла для записи картинки без расширения (расширение всегда png). Второй текст показывается над графиком как заголовок. Размер картинки без масштабирования 980*500 (если G = 100 или 1100). Изменяя параметр G можно получить картинку любого размера. Пример вызова:
#d 7 A 1 101 1 -1 1 247 1100 #pri s\I-2 k;|Figure\E ##smau

.

smap - окно законченного графика функций в массиве r() с аргументом

Программа полностью аналогична программе smau (см. выше) с тем отличием, что каждая точка функций рисуется одним пикселем экрана без интерполяции. При этом ширина графика масштабируется только в боковых областях, а ширина оси аргумента точно равна числу точек функции и может быть очень большой. Такая разновидность полезна в аналитических целях в процессе отладки программы, чтобы понять как точно сетка точек описывает изменения функции. Вызов программы точно такой же, как и выше с заменой имени суперкоманды
#d 7 A 1 101 1 -1 1 247 1100 #pri s\I-2 k;|Figure\E ##smap

.

smm - процедура графика матрицы чисел в массиве в виде карты контраста с параметрами

Программа показывает картинку визуализации матрицы чисел, записанной в массиве r() как функция двух аргументов на сетке с постоянным шагом. Она имеет ограниченное число параметров, которые все же позволяют настроить картинку нужным образом. Все параметры следует записать в переменные, а именно, A = начальный индекс массива r(), где записана матрица, B = число точек первого аргумента (по горизонтали), C = число точек второго аргумента (по вертикали), D = минимальное значение на горизонтальной оси (первый аргумент), E = максимальное значение на горизонтальной оси, F = минимальное значение на вертикальной оси (второй аргумент), G = максимальное значение на вертикальной оси, H = ширина точки в пикселах экрана (обычно 1, но может быть больше), I = высота точки в пикселах экрана (обычно 1, но может быть больше), J = размер текста числовых значений на осях, K = составное целое число из 4 разрядов. Четвертый разряд задает показ графика, 0 - не показывать, 1 -показывать с остановкой работы программы. Три младшие разряда задают коэффициент масштабирования графика в процентах, то есть 100 означает без масштабирования. Стандартное значение K=1100; Кроме этого, перед вызовом программы необходимо напечатать два текста, разделенные символом вертикальной черты '|'. Первый текст определяет имя файла для записи картинки без расширения (расширение всегда png). Второй текст показывается над графиком как заголовок. Программа показывает линейный контраст от минимального до максимального значения. Шкала контраста линейная рисуется справа и на ней указана разметка оси с учетом минимального и максимального значений в массиве. Программа не портит переменные и массивы, кроме 100 последних элементов массива r() и 5 последних элементов массива i(). Есть особый случай, когда параметр K отрицателен. В этом случае используется положительное значение, но картинка показывается без масштабирования и без разметки. Однако четвертый разряд по-прежнему задает показ графика, и используется имя файла для записи картинки. Кроме того, параметр [pa=0;] задает черно-белую палитру на картинке, [pa=1;] задает фиксированную цветную (сине-красно-белую) палитру, [pa=2;] задает фиксированную цветную с большим числом цветов, наконец [pa=3;] задает цветную палитру из файла colmap.txt. Вот пример нормального использования процедуры
#d 11 A 1 101 101 -5 5 -9 9 2 2 18 1100 #p [pa=3;] #pri filename|title\E ##smm

.

smmu - универсальная процедура графика матрицы чисел в виде карты почернения (линейная шкала)

Программа показывает стандартный график матрицы чисел, записанной в массиве r() как функция двух аргументов на сетке с постоянным шагом. Все параметры заданы стандартным образом, кроме 4 параметров, которые следует записать в переменные, а именно, A = начальный индекс массива r(), где записана матрица, B = число точек первого аргумента (по горизонтали), C = число точек второго аргумента (по вертикали), D = составное целое число из 4 разрядов. Четвертый разряд задает показ графика, 0 - не показывать, 1 -показывать с остановкой работы программы. Три младшие разряда задают коэффициент масштабирования графика в процентах, то есть 100 означает без масштабирования. Стандартное значение D=1100; Кроме этого, перед вызовом программы необходимо напечатать два текста, разделенные символом вертикальной черты '|'. Первый текст определяет имя файла для записи картинки без расширения (расширение всегда png). Второй текст показывается над графиком как заголовок. Программа показывает числа, нормированные на интервал (0,1), а значения минимума и максимума реальной матрицы показываются в заголовке. Она не портит переменные и массивы, кроме 100 последних элементов массива r() и 5 последних элементов массива i(). Есть особый случай, когда параметр D отрицателен. В этом случае используется положительное значение, но картинка показывается без масштабирования и без разметки. Однако четвертый разряд по-прежнему задает показ графика, и используется имя файла для записи картинки. Кроме того, параметр [pa=0;] задает черно-белую палитру на картинке, [pa=1;] задает фиксированную цветную (сине-красно-белую) палитру, [pa=2;] задает фиксированную цветную с большим числом цветов, наконец [pa=3;] задает цветную палитру из файла colmap.txt. Вот пример нормального использования процедуры
#d 4 A 1 N N 1100 #p [pa=3;] #pri filename|title\E ##smmu

.

smmup - универсальная процедура карты почернения (линейная шкала) с указанием размеров пикселя

Программа показывает стандартный график матрицы чисел, записанной в массиве r() как функция двух аргументов на сетке с постоянным шагом. Все параметры заданы стандартным образом, кроме 5 параметров, которые следует записать в переменные, а именно, A = начальный индекс массива r(), где записана матрица, B = число точек первого аргумента (по горизонтали), C = число точек второго аргумента (по вертикали), D = составное целое число из 4 разрядов. Четвертый разряд задает показ графика, 0 - не показывать, 1 -показывать с остановкой работы программы. Три младшие разряда задают коэффициент масштабирования графика в процентах, то есть 100 означает без масштабирования. Стандартное значение D=1100; E = составное число из двух разрядов. Левый разряд указывает сколько пикселей экрана находится в одном пикселе картинки по оси x, а второй -- по оси y. Кроме этого, перед вызовом программы необходимо напечатать два текста, разделенные символом вертикальной черты '|'. Первый текст определяет имя файла для записи картинки без расширения (расширение всегда png). Второй текст показывается над графиком как заголовок. Программа показывает числа, нормированные на интервал (0,1), а значения минимума и максимума реальной матрицы показываются в заголовке. Она не портит переменные и массивы, кроме 100 последних элементов массива r() и 5 последних элементов массива i(). Есть особый случай, когда параметр D отрицателен. В этом случае используется положительное значение, но картинка показывается без масштабирования и без разметки. Однако четвертый разряд по-прежнему задает показ графика, и используется имя файла для записи картинки. Кроме того, параметр [pa=0;] задает черно-белую палитру на картинке, [pa=1;] задает фиксированную цветную (сине-красно-белую) палитру, [pa=2;] задает фиксированную цветную с большим числом цветов, наконец [pa=3;] задает цветную палитру из файла colmap.txt. Вот пример нормального использования процедуры
#d 5 A 1 N N 1100 13 #p [pa=3;] #pri filename|title\E ##smmup

.

smmul - универсальная процедура графика матрицы чисел в виде карты почернения (логарифмическая шкала)

Программа показывает стандартный график матрицы чисел, записанной в массиве r() как функция двух аргументов на сетке с постоянным шагом. Все параметры заданы стандартным образом, кроме 4 параметров, которые следует записать в переменные, а именно, A = начальный индекс массива r(), где записана матрица, B = число точек первого аргумента (по горизонтали), C = число точек второго аргумента (по вертикали), D = составное целое число из 4 разрядов. Четвертый разряд указывает на показ графика, 0 - не показывать, 1 -показывать с остановкой работы программы. Три младшие разряда задают коэффициент масштабирования графика в процентах, то есть 100 означает без масштабирования. Стандартное значение D=1100; Кроме этого, перед вызовом программы необходимо напечатать два текста, разделенные символом вертикальной черты '|'. Первый текст определяет имя файла для записи картинки без расширения (расширение всегда png). Второй текст показывается над графиком как заголовок. Программа показывает числа, нормированные на максимальное значение равное 1, а значения минимума и максимума реальной матрицы показываются в заголовке. Используется логарифмическая шкала, поэтому минимальное значение должно быть больше 0. Ошибка не фиксируется. Команда не портит переменные и массивы, кроме 100 последних элементов массива r() и 5 последних элементов массива i(). Кроме того, параметр [pa=0;] задает черно-белую палитру на картинке, [pa=1;] задает фиксированную цветную (сине-красно-белую) палитру, [pa=2;] задает фиксированную цветную с большим числом цветов, наконец [pa=3;] задает цветную палитру из файла colmap.txt. Вот пример использования процедуры
#d 4 A 1 N N 1100 #p [pa=3;] #pri filename|title\E ##smmul

.

smmx - универсальная процедура карты матрицы c разметкой осей и с размерами пикселя (линейная шкала)

Программа показывает стандартный график матрицы чисел, записанной в массиве r() как функция двух аргументов на сетке с постоянным шагом. Все параметры заданы стандартным образом, кроме 6 общих параметров и 15 параметров разметки осей x,y,z. Общие параметры следует записать в переменные, а именно, A = начальный индекс массива r(), где записана матрица, B = число точек первого аргумента (по горизонтали), C = число точек второго аргумента (по вертикали), D = составное целое число из 4 разрядов. Четвертый разряд задает показ графика, 0 - не показывать, 1 -показывать с остановкой работы программы. Три младшие разряда задают коэффициент масштабирования графика в процентах, то есть 100 означает без масштабирования. Стандартное значение D=1100; E = составное число из двух разрядов. Левый разряд указывает сколько пикселей экрана находится в одном пикселе картинки по оси x, а второй -- по оси y; F = начальный индекс массива r(), где записаны 15 чисел разметки осей по стандартной системе, 5 чисел на каждую ось: левое значение, правое значение, значение первой длинной метки, шаг до второй длинной метки, число коротких меток между длинными. Кроме этого, перед вызовом программы необходимо напечатать два текста, разделенные символом вертикальной черты '|'. Первый текст определяет имя файла для записи картинки без расширения (расширение всегда png). Второй текст показывается над графиком как заголовок. Результат также зависит от знаков переменных D и E. Если E > 0, то программа показывает числа, нормированные на интервал (0,1), а значения минимума и максимума реальной матрицы показываются в заголовке. В этом случае заданная разметка третьей оси не используется, вместо нее принудительно вводится разметка как 0 1 0 0.2 1 . Это сделано для универсальности, потому что иногда значения функции могут либо очень большими, либо очень маленькими и выставлять их на вертикальную ось некрасиво. Если E < 0, то используется модуль E, но вертикальная ось используется та, которая задана, а программа показывает реальные числа, но значения максимума и минимума все равно показываются. Если D > 0, то график полный. Если D < 0, то используется модуль D, но картинка показывается без масштабирования и без осей, то есть только картинка голой матрицы. Однако четвертый разряд по-прежнему задает показ графика, и используется имя файла для записи картинки. Иногда это бывает необходимо. Важное замечание касается размера символов текста. Программа автоматически определяет размер, масштабируя его по формуле 18*N1/700, где N1 -- число точек по горизонтали. Это необходимо для очень большого числа точек, так как при уменьшении размера графика тексты становятся аномально мелкими. Если число N1 мало и график увеличивается размером пиксела, то учитывается произведение N1 на размер пиксела. Программа не портит переменные и массивы, кроме 100 последних элементов массива r() и 5 последних элементов массива i(). Кроме того, параметр [pa=0;] задает черно-белую палитру на картинке, [pa=1;] задает фиксированную цветную (сине-красно-белую) палитру, [pa=2;] задает фиксированную цветную с большим числом цветов, наконец [pa=3;] задает цветную палитру из файла colmap.txt. Кроме того, нужно регулировать положение окна, которое задается параметрами [em=; xp=; yp=;]. Вот пример нормального использования процедуры
# F=J+N1*N2; #d 15 r(F) -X1 X1 -X1 X2 4 t0 t2 t0 t3 4 0 m 0 m0 4 #d 5 A J N1 N2 1100 13 #p [pa=1; em=0;] #pri filename|title\E ##smmx

.

smq3d - окно показа 2D функции в массиве r() как квази 3D графика

Программа показывает квази-трехмерный график 2D функции, значения которой записаны в массиве r(). Все параметры заданы, кроме 11 параметров, которые следует записать в переменные, а именно, A = начальный индекс массива, B = число точек по оси X, C = число точек по оси Y, D=X1, E=X2 -- минимальное и максимальное значения аргумента по оси X, F=Y1, G=Y2 -- минимальное и максимальное значения аргумента по оси Y, H = дополнительный сдвиг начала осей вправо в пикселах (0 или больше), I = добавление к числу шагов по оси Х для сдвижки вправо следующего сечения (стандартно сдвиг делается на 1 шаг, но часто этого мало), J = вертикальный сдвиг следующего сечения в единицах 0.001 от максимального значения (от 10 до 50), K = размер текста для числовых значений на осях. Также необходимо предварительно напечатать имя файла для записи картинки. Программа позволяет очень просто получить вполне качественный график двумерного массива. Вот пример вызова процедуры
#d 11 A J N1 N4 -0.5 0.5 0 50 0 10 40 18 #pri 11/fig3D\E ##smq3d

.

area - модуль произвольной области с границей в среде универсальной графики (новая)

Программа используется для рисования произвольной области с границей в среде универсальной графики. Перед использованием программы необходимо открыть, а после использования закрыть режим универсальной графики. Перед вызовом программы необходимо задать входные параметры для ее работы, а именно, в переменных: H - вертикальный размер графической области, T -- толщина линии контура области, если равна нулю, то линия не рисуется, K -- цвет линии-контура, если равен нулю, то линия не рисуется, C -- цвет самой области, если равен нулю, то область не рисуется, N -- число сегментов на контуре области, последний сегмент добавляется чтобы замкнуть контур, X,Y -- координаты первой точки контура, отсчет координат идет от левого нижнего угла области графика. Также в r(1) -- r(2*N) должны быть заданы координаты всех сегментов.

.

arrow - модуль стрелки в среде универсальной графики (новая)

Программа используется для рисования стрелки в среде универсальной графики. Перед использованием программы необходимо открыть, а после использования закрыть режим универсальной графики. Перед вызовом программы необходимо задать входные параметры для ее работы, а именно, в в переменных: H -- вертикальный размер графической области, X,Y -- координаты начала стрелки, при этом предполагается, что головка стрелки находится на ее конце, L -- полная длина стрелки от ее начала до ее конца, включая головку, A -- угол поворота стрелки вокруг начала из горизонтального положения против часовой стрелки, T-- толщина линии на стрелке, C -- номер цвета, которым рисуется стрелка, S -- ширина головки, длина головки фиксирована как 1.5*ширину.

.

elli -- модуль эллипса с контуром в среде универсальной графики (новая)

Эта команда во многом аналогична команде area, но она используется для частного случая, когда контуром является эллипс, вписанный в прямоугольник. Перед вызовом программы необходимо задать входные параметры для ее работы, а именно, в переменных: H - вертикальный размер графической области, T -- толщина линии контура области, если равна нулю, то линия не рисуется, K -- цвет линии-контура, если равен нулю, то линия не рисуется, C -- цвет самой области, если равен нулю, то область не рисуется, X,Y -- координаты центра прямоугольника, отсчет координат идет от левого нижнего угла области графика, U,V -- ширина и высота прямоугольника.

.

egcl -- закрывает графику и записывает картинку в png файл (новая)

Программма закрывает графический режим с записью картинки в png файл и показом из файла. Перед вызовом необходимо напечатать имя файла (без расширения) для записи.

.

img -- модуль вставки картинки на слайд (новая)

Программа используется для вставки картинки в среде универсальной графики. Перед использованием программы необходимо открыть, а после использования закрыть режим универсальной графики. Она имеет всего три параметра в переменных X,Y,Z. При этом X,Y задают координаты центра картинки, а Z -- номер картинки в памяти компьютера. Картинку в память надо спасти с помощью команды #w до того, как открывается графический режим.

.

linem - модуль линии между двумя точками в среде универсальной графики

Программа используется для рисования линии между двумя точками в среде универсальной графики. Перед использованием программы необходимо открыть режим универсальной графики командой #eg [op=open; ...], а после использования закрыть этот режим командой #eg [op=clos; ...]. Кроме того, перед вызовом программы необходимо задать входные параметры для ее работы в первых 7 элементах массива r(): x1,y1,x2,y2,T,C,H, где x1,y1 - координаты первой точки, x2,y2 - координаты второй точки, T - толщина линии, C - номер цвета, H - вертикальный размер графической области. Координаты отсчитываются от левой нижней точки области рисунка. Трансляцию объекта наверх нужно выполнять с отрицательным значением вертикальной координаты. Используются 12 первых элементов массива r(). Существует также суперкоманда line, в которой координаты надо задавать от левого верхнего угла области рисунка, а 7-й параметр не используется.

.

lines -- модуль многосегментной линии в среде универсальной графики (новая)

Программа используется для рисования многосегментной линии в среде универсальной графики. Перед использованием программы нужно открыть, а после использования закрыть режим универсальной графики. Перед вызовом программы необходимо задать входные параметры для ее работы, а именно, в переменных: H - вертикальный размер графической области, C - номер цвета, T - толщина линии, N - число сегментов на линии, X, Y -- координаты первой точки. Далее в массиве r(1) -- r(2*N) должны быть заданы x,y координаты всех сегментов (отрезков) парами на каждый сегмент, а в массиве i(1) -- i(N) должны быть заданы признаки видности сегмента, если 1, то сегмент рисуется, если 0 - то не рисуется. То есть линия может состоять из кусков как сложный пунктир. Вертикальная координата задается снизу вверх. Вот пример программы где используется команда.
# W=1024; H=768; #eg [op=open; twi=W; the=H; col=246;] # X=100; Y=100; C=247; N=4; T=3; #d 8 r(1) 100 0 0 100 -100 0 0 -100 4 i(1) 1*4 ##lines #pri slide\E ##egcl

.

mline - модуль многосегментной линии в среде универсальной графики

Программа используется для рисования многосегментной линии в среде универсальной графики. Перед использованием программы необходимо открыть режим универсальной графики командой #eg [op=open; ...], а после использования закрыть этот режим командой #eg [op=clos; ...]. Кроме того, перед вызовом программы необходимо задать входные параметры для ее работы, а именно, в переменной H - вертикальный размер графической области, C - номер цвета, T - толщина линии, N - число точек на линии. Линия будет иметь N-1 сегментов, так как внутренние точки используются дважды. Далее в массиве r(1) - r(2*N) должны быть заданы x,y координаты всех точек, парами на каждую точку, а в массиве i(1) - i(N-1) должны быть заданы признаки видности сегмента, если 1, то сегмент рисуется, если 0 - то не рисуется. То есть линия может состоять из кусков как пунктир. Вертикальная координата задается снизу вверх. Используются переменные: C,H,N,T,k,l,n,o1,o2,первые элементы r() и i() и последние 10 элементов r(). Трансляцию объекта наверх нужно выполнять с отрицательным значением вертикальной координаты. Вот пример использования команды.
#d 1 H 768 1 C 3 1 T 3 1 N 4 8 r(1) 801 447 705 447 750 368 770 368 3 i(1) 1 0 1 ##mline

.

mtext - модуль текста из многих строк в среде универсальной графики

Программа используется для рисования текста, состоящего из многих строк в среде универсальной графики. Перед использованием программы необходимо открыть режим универсальной графики командой #eg [op=open; ...], а после использования закрыть этот режим командой #eg [op=clos; ...]. Кроме того, перед вызовом программы необходимо задать входные параметры для ее работы, а именно, в переменной H - вертикальный размер графической области, а в первых элементах реального массива r() следующие значения: (1),(2) - x,y координаты базовой точки постановки первой строки текста на график, y координата отсчитывается снизу вверх, (3) - угол вращения строк в градусах против часовой стрелки, (4) - размер текста в единицах графика (для простоты можно считать в пикселях), (5) - цвет текста, (6) - способ установки текста: 1 - базовая точка слева, 2 - в середине, 3 - справа, вертикальная позиция внизу, 4, 5, 6 - то же самое, но вертикальная позиция посередине, 7, 8, 9 - вертикальная позиция наверху текста (7) - тип текста: 0 - простой, 1 - жирный, 2 - наклонный, 3 - жирный-наклонный (8) - базовый сдвиг вниз следующей строки текста по отношению к предыдущей. Кроме того в следующих элементах (9), (10), . . . необходимо для каждой строки, начиная со второй задать дополнительный сдвиг ее положения по горизонтали и вертикали, стандартно нужно задавать нули. Всего таких пар чисел надо задать n-1, если n - число строк. Задаваемые значения не сохраняются. Кроме того, имя шрифта (фонта) необходимо задать в \Tf1 f2. Сам текст должен быть напечатан перед вызовом команды, причем каждая строка должна заканчиваться признаком конца строки, включая последнюю строку. Замечу, что в случае одной строки эта команда совпадает с командой textm. Программа портит N первых элементов массива i(), 12+2*N первых элементов массива r(), а также последние элементы этого массива.
Вот пример примененеи команды
#d 64 r(1) 50 660 0 26 247 1 0 32 0*56 #pri Tahoma\E # f1=s(4); f2=s(5); #pri \-
Пример 3. Профиль генерировался конечным рядом Фурье со случайными \n\-
коэффициентами. Средний период 24 мкм. Черная (красная слева)-- решение\n\-
Синяя (слева) и красная (справа) исходные кривые. Расстояние 8 см.\n\E ##mtext

.

pfeg - модуль графика функции в массиве r() в среде универсальной графики

Программа используется для рисования научного графика функции одной переменной на осях координат в среде универсальной графики. Перед использованием программы необходимо открыть режим универсальной графики командой #eg [op=open; ...], а после использования закрыть этот режим командой #eg [op=clos; ...]. Кроме того, перед ее вызовом необходимо задать достаточно большое количество параметров, определяющих свойства графика. Так как это не законченное окно графика, а лишь модуль, то он рассчитан на рисование только одной функции на осях координат. Если необходимо рисовать несколько функций на одних и тех же осях координат, то можно просто несколько раз повторить вызов этого модуля с разными функциями, но с теми же осями координат или вообще без осей. А можно рисовать и много графиков с разными осями и в разных позициях. Итак, в массиве r() задаются значения функции на сетке с постоянным шагом. В переменных X1 и X2 необходимо задать минимальное и максимальное значения аргумента, N - число точек, B - начальный индекс массива r(), где задана функция, F - начальный индекс массива r(), где заданы 11 параметров разметки осей (ПРО), H - вертикальный размер полной области для всего рисунка, как задано командой #eg [op=open; ...], это необходимо для правильного пересчета вертикальных координат, T1 - толщина линий на осях координат, T2 - толщина кривой, изображающей функцию, С - номер цвета, которым рисуется кривая, оси всегда рисуются черными. Кроме переменных необходимо задать параметры командой
#p [wid= ; hei= ; tsi= ; bot= ; top= ; sty= ; mki= ; msi= ;]
где [wid] и [hei] задают ширину и высоту осей графика, [tsi] задает размер текста для цифр на осях, [bot] и [top] задают длину коротких и длинных рисок, [sty] задает способ рисования осей. Это в общем случае 5-тиразрядное целое число. Первые 4 разряда при отсчете слева задают нормальный (0) отсутсвие (1) аномальный (2) способы задания левой, нижней, правой и верхней осей соответственно. Нормальное задание осей, когда левая и нижняя с числами, а правая и верхняя - без чисел. Аномальное задание - как раз наоборот. Если задана 1 то данная ось не рисуется. Наконец 5-й, самый младший, разряд показывает способ задания рисок на осях, есть два варианта (0) = риски внутрь (1) = риски наружу. Левые нули можно не писать. Параметр [mki] задает тип маркера, он может иметь пять значений 0,1,2,3,4, где 0 - означает кривую (маркеров нет), остальные значения показывают функцию маркерами: 1 - пустой квадрат, 2 - полный квадрат, 3 - пустой круг, 4 - полный круг. Для случаев 1 и 3 переменная T2 задает толщину линии рисования маркеров. Параметр [msi] задает размер маркера в пикселах, он должен быть достаточно большим, во всяком случае больше толщины линии, которым маркер рисуется. Хотя можно пробовать разные варианты.
Важно знать, что график помещается в левый нижний угол всей области рисунка. Поэтому перед вызовом программы надо задать трансляцию координат на заданный вектор, причем для подъема графика надо задавать отрицательное вертикальное смещение, потому что смещение делается сверху вниз. Еще один момент. Если несколько функций задаются одновременно, то надо помнить, что программа портит первые ячейки массивов r() и i(). Для одной кривой это неважно, так как программа копирует данные, но если кривых несколько, то лучше их задавать в номерах более 1000. А 11 параметров (ПРО) сразу после кривых.
Параметры разметки осей описаны в описании языка ACL в главе 19. Ниже я повторю это описание: 1 = fnor (единица измерения для функций, график будет показывать f(x)/fnor, если нормировать не надо. ставим 1), 2 = xmin (минимальное значение на оси x), 3 = xmax (максимальное значение на оси x), 4 = xmf (значение для первой длинной риски на оси x), 5 = xms (разница значений между длинными рисками на оси x), 6 = xni (число коротких рисок в области между длинными рисками на оси x), 7 = ymin (минимальное значение на оси y), 8 = ymax (максимальное значение на оси y), 9 = ymf (значение для первой длинной риски на оси y), 10 = yms (разница значений между длинными рисками на оси y), 11 = yni (число коротких рисок в области между длинными рисками на оси y).
Список всех используемых переменных: B,С,F,H,N,T1,T2,X1,X2, C8,A9-H9,S9,i9,k9,l9,n9,x9,y9 i(1)-.. , r(1)-.. ,r(810997)-.. Полезно посмотреть пример использования суперкоманды в тексте программы "/proc/demo.acl", которая тестирует все суперкоманды.

.

rectm - модуль прямоугольной области с границей в среде универсальной графики

Программа используется для рисования прямоугольной области с границей в среде универсальной графики. Перед использованием программы необходимо открыть режим универсальной графики командой #eg [op=open; ...], а после использования закрыть этот режим командой #eg [op=clos; ...]. Кроме того, перед вызовом программы необходимо задать входные параметры для ее работы в первых элементах реального массива r(), а именно: (1),(2) - x,y координаты левой верхней точки прямоугольника, отсчитываемые от левой нижней точки всей области рисунка, (3),(4) - ширина и высота прямоугольной области, (5) - толщина линии контура прямоугольника, если равна нулю, то линия не рисуется, (6) - цвет линии-контура, надо задавать даже если линия не рисуется, (7) - цвет самой области, r(8) - вертикальный размер полной области рисунка. Используются 13 первых элементов массива r(). Существует еще процедура rect , которая отличается тем, что в ней координаты верхней левой точки прямоугольника отсчитываются от верхней левой точки области, а параметр r(8) задавать необязательно.

.

text - модуль текстовой строки в среде универсальной графики

Программа используется для рисования строки текста в среде универсальной графики. Перед использованием программы необходимо открыть режим универсальной графики командой #eg [op=open; ...], а после использования закрыть этот режим командой #eg [op=clos; ...]. Кроме того, перед вызовом программы первые 7 элементов реального массива r() должны содержать следующие значения. (1),(2) - x,y координаты базовой точки постановки текста на график, (3) - размер текста в единицах графика (для простоты можно считать в пикселях), задается отклонение от стандартного значения 30, то есть если задать 0, то будут 30, (4) - угол вращения в градусах против часовой стрелки, (5) - цвет текста, (6) - способ установки текста: 1 - базовая точка слева, 2 - в середине, 3 - справа, (7) - тип текста: 0 - простой, 1 - жирный, 2 - наклонный, 3 - жирный-наклонный. Эти семь значений не сохраняются, поэтому их необходимо задавать перед каждым вызовом команды. Кроме того, имя шрифта (фонта) необходимо задать в \Tf1 f2. В данной команде вертикальная координата идет сверху вниз. Есть модификация команды textm, в которой вертикальная координата идет снизу вверх, а в переменной H надо задать вертикальный размер области рисунка. Сама строка текста должна быть напечатана непосредственно перед вызовом команды. Используются переменные: C,H,f1,f2,r(1)-r(7),t() Пример применения команды:
# H=600; s(3)=99001; #pri Tahoma\E # f1=s(4); f2=s(5);
#d 7 r(1) 100 100 0 30 247 1 3 #pri Привет всем !\E ##textm

.

texts -- рисует текст из многих строк в среде универсальной графики (новая)

Программа используется для рисования текста, состоящего из многих строк в среде универсальной графики. Перед использованием программы необходимо открыть, а после использования закрыть режим универсальной графики. Перед вызовом программы необходимо задать входные параметры для ее работы, а именно, в переменных: H -- вертикальный размер графической области, X,Y -- координаты первой строки, Z -- базовый вертикальный сдвиг вниз следующей строки, A -- угол поворота в градусах, S -- размер текста, C -- цвет текста, P -- позиция относительно координат: 1 - базовая точка слева, 2 - в середине, 3 - справа, вертикальная позиция внизу, 4, 5, 6 - то же самое, но вертикальная позиция посередине, 7, 8, 9 - вертикальная позиция наверху текста, K -- тип текста: 0 - простой, 1 - жирный, 2 - наклонный, 3 - жирный-наклонный, D,E -- начало и длина строки с фонтом. Кроме того, в элементах r(1), (2), . . . необходимо для каждой строки, начиная с первой, задать дополнительный сдвиг ее положения по горизонтали и вертикали, стандартно нужно задавать нули. Всего таких пар чисел надо задать n, если n - число строк. Задаваемые значения не сохраняются. Имя шрифта (фонта) необходимо задать в переменных D и E, они определяют начало и длина строки в текстовом массиве t(). Обычно имя фонта печатается командой #pri затем D=s(4); E=s(5);. Сам текст должен быть напечатан перед вызовом команды, причем каждая строка должна заканчиваться признаком конца строки, включая последнюю строку.
Вот пример применения команды
#d 90 r(1) 0*90 3 X 100 600 24 # A=0; S=18; P=1; K=1; C=248; #pri Tahoma\E # D=s(4); E=s(5); #pri \-
Это первая строка текста\n Это вторая строка текста\n Это третья строка текста\n И так далее\n\E ##texts