30. ACL, задачи и решения. Анимация.

автор: Виктор Кон, Курчатовский институт, URL: http://kohnvict.ucoz.ru/main.htm

1. Введение.

В языке ACL есть специальный аппарат программирования анимаций. Он не такой мощный, как в языке Java, зато более простой в реализации и более понятный для новичков. Как это работает написано в главе 16. Здесь я просто покажу некоторые примеры готовых программ. Замечу также, что в языке есть и специальная операция команды анимации, которая показывает анимацию заданного типа в готовом виде. Необходимо только задать входные данные. Это тоже иногда полезно использовать. Она показывает произвольный набор картинок. А можно писать какие-то специальные программы анимаций.

2. Показ двумерного массива в виде графиков сечений, сменяющих друг друга с течением времени.

Такая программа может понадобиться в презентациях докладов по моей программе показа презентаций. Программа показа презентаций называется Lecture и она существует как модуль программы vkUtility. В этой программе к любому слайду можно добавить файл с программой на языке ACL, которая выполняется при нажатии клавиши [Enter] в отдельном окне поверх слайда. Предположим, что вы показали на слайде двумерное распределение какой-то величины. Но в нем есть мелкие осцилляции, которые плохо видны на двумерном распределении. Альтернативно можно показать серию сечений. Но готовить много картинок не хочется. Вместо этого удобнее записать сам двумерный массив и готовить картинки динамически. Программа для такого показа может быть такой

Рассмотрим что она делает. В 1-й строке в переменных n1 и n2 заданы размеры числового массива по горизонтали и по вертикали. В переменных W и H заданы размеры картинки графика в пикселах. Далее в переменной d задан шаг сетки точек и в переменных x1 и x2 вычисляются первый и последний аргументы каждого сечения. Во 2-й строке в массив записаны 11 чисел разметки осей графика. В 3-й строке числа массива прочитываются из файла в заданным названием (его можно менять) в папке lect. Для программы презентации название папки менять нельзя, если вся презентация записана в zip архив.

Наконец, в 4-й строке открывается окно анимации посередине экрана компьютера. Затем открывается цикл и обнуляется счетчик цикла k. В 7-й строке задаются входные данные для показа стандартного графика, который делает суперкоманда smau. Но суперкоманда не используется, вместо ее вызова записан ее код, который выделен горизонтальными линиями. При этом программа запоминает картинку в третьем элементе массива картинок в памяти компьютера. Затем открывается графический режим для новой картинки, в нее записывается уже приготовленная картинка и режим закрывается. Новая картинка, то есть фактически та же самая снова спасается, но уже во второй элемент массива картинок.

Вообще говоря, это можно было бы не делать, просто в этом случае вместе со стандартной картинкой в новую картинку можно добавить еще что-то, а в примере показан способ как это сделать. После того, как картинка полностью готова, она показывается в окне анимации, а затем командой #rob устанавливается задержка в работе программы на 200 миллисекунд, число можно менять. Каждый раз команда показа картинок проверяет наличие нажатых клавишей и сообщает их код в переменную s(2). Если последней нажатой клавишей была клавиша [Enter], код которой равен 10, то счетчик увеличивается на 1, а по достижении максимального значения снова обнуляется.

И все. Цикл работает бесконечно. А выход из цикла выполняется по закрытию окна анимации кликом на крестике в правом углу титульной строки. В этом случае все циклы перестают работать, программа выходит из цикла, а команда #ini снова восстанавливает работу всех циклов. Интересно, что если в процессе показа нажать любую клавишу, отличную от [Enter], то картинка все равно рисуется постоянно и сменяется, только на ней все время будет одно и то же сечение, и зритель никакой анимации не заметит. То есть программа позволяет остановить анимацию на любом кадре и потом запустить ее снова.

Код программы можно использовать как есть и только менять значение переменных n1, n2, d, разметку осей и имя файла числовой матрицы. Переменные W и H менять нельзя, так как они используются в явном виде в программе рисования графика. Числовая матрица должна быть записана в коде компьютера в таком виде, как это делает Java. Если матрица записана в другом виде, то ее надо перезаписать используя команды языка ACL.