Раньше это можно было зделать просто нажав на тест и посмотреть результаты а сейчас никак |
Основы "живого" моделирования
Алгоритм
- Производится начальная загрузка в буфер показа БП "нулевого" кадра, т.е. фонового, нейтрального выражения объекта в состоянии ожидания.
- Реализуется временной режим работы модели, поддерживающий показ кадров — ключевых или промежуточных — с частотой 20 Гц. Он вхолостую вырабатывает остаток времени, оставшийся от работы программ, до ближайшего значения, кратного 50 мс.
- Демонстрируется очередной кадр из БП и производится обращение к Программе обработки ситуации, рассмотренной ранее.
- Выполняется после возврата из Программы обработки ситуации. Анализируется: был ли показанный кадр ключевым или промежуточным? Если показанный кадр был промежуточным, выполняется 7.
- Если показанный кадр был ключевым, анализируется: иссяк ли сюжетный ряд, т.е. выработала ли Программа оценки ситуации продолжение сюжетного ряда, как реакцию на внешние факторы (рисунок)? Если сюжетный ряд иссяк, управление передается 1 для загрузки "нулевого" кадра, который будет показываться, пока не выработается новый сюжетный ряд. Если сюжетный ряд не иссяк, выполняется 6.
- Производится подготовка формирования промежуточных кадров между только что показанным К и следующим L. Взводится счетчик показа промежуточных кадров СПК. Для упрощения демонстрационной модели считаем, что между любыми двумя смежными ключевыми кадрами следует показать 19 промежуточных. То есть выполняется операция СПК := 20.
- СПК уменьшается на единицу для показа очередного промежуточного кадра.
- Если в результате 7 СПК достиг нуля, показ промежуточных кадров считается законченным, следующим показываемым кадром должен быть кадр L. Выполняется 9. Если СПК не равно нулю, выполняется 10.
- Кадр L загружается в БП, далее выполняется 2.
- Если СПК не равно нулю, организуется цикл по j (шаги 11-16) перебора контрольных точек объекта. По окончании цикла организуется переход к 20.
-
Для контрольной точки Kj (xKj, yKj) отыскивается соответствующая ей точка Lj (xLj, yLj) из СКТ кадра L. Отыскивается область
радиуса Rj с центром в точке Kj , включающая точку Lj (ее проекцию на кадр К ). Радиус Rj вычисляется из соотношения
2Rj = r(Kj, Lj) + l,
где r — расстояние, l — поправка, подбираемая экспериментально.
-
Организуется цикл перебора точек P(x, y) из окрестности
контрольной точки Kj . Этот перебор осуществляется "циклом в цикле":
По окончании перебора выполняется 17.
-
Проверяется, разделены ли точки P и L разрезами. Данная проверка производится в результате решения следующей задачи.
Пусть на рис. 15.17 точки P(x, y) и L(xL, yL) (индекс j опустим) находятся по разные стороны отрезка [A, B], где A = (xA, yA) , B = (xB, yB) , так, что отрезки [P, L] и [A, B] пересекаются. (Именно этот случай запрещает перемещение точки Р за разрез — в окрестность точки L.)
Рассмотрим параметрическое описание этих отрезков и запишем уравнения для нахождения точки пересечения
.
Или:
Отсюда
Если отрезки пересекаются, выполняется условие 0 <= k1 <= 1, 0 <= k2 <= 1. В противном случае отрезки не пересекаются, и перемещение точки Р в направлении к точке Lj допустимо. Если точки P и L разделены разрезом, производится переход к 12. В противном случае выполняется 14.
-
Рассчитываются координаты переноса точки Р при формировании очередного промежуточного кадра К*:
Здесь учитывается удаление точки Р от центра — от точки Kj . Так, на окружности радиуса Rj перенос затихает вовсе. Текущее значение СПК характеризует оставшуюся часть смещения.
- Проверяется, является ли перенесенная точка контрольной или границей разреза. Если не является, выполняется 12.
- Если перенесенная точка является контрольной или границей разреза, фиксируются новые значения координат перенесенной точки (ее образом становится точка Kj* , если это была контрольная точка) в СКТ промежуточного кадра K*. Далее выполняется 12.
- Выполняется по окончании цикла перебора точек
из
окрестности (шаг 12). Формируется цикл обработки разрезов, оказавшихся в этой окрестности. По окончании цикла выполняется 10. Организуется перебор точек P(x, y) этой окрестности, подобно организованному в блоке 12.
- Проверяется, является ли очередная анализируемая точка "пустой" вследствие деформации (растяжения) объекта. При отрицательном результате анализа выполняется 20.
-
Если точка "пустая", находится ее усредненное значение на основе непустых окружающих ее точек:
где P(x, y) отождествляется с точкой P(xn, ym) для отображения окружающих точек, S — число таких "непустых" точек.
- Организуется цикл обработки разрезов кадра К*. После обработки всех разрезов выполняется 24.
- Для каждого разреза формируется некоторая окрестность, опирающаяся на разрез, и организуется цикл перебора точек P(x, y) , образованного прямоугольника.
- Проверяется: точка P(x, y) — "пустая"?
-
Если да, отыскивается точка Q(x, y) в кадре L (с теми же координатами) и налагается на точку Р: P(x, y) := Q(x, y).
Далее выполняется 20.
- После анализа всех разрезов (шаг 20) считается, что кадр К* полностью сформирован. Производится загрузка сформированного кадра в буфер показа БП и управление передается 2 для продолжения работы модели.