|
Раньше это можно было зделать просто нажав на тест и посмотреть результаты а сейчас никак |
Основы "живого" моделирования
Алгоритм
- Производится начальная загрузка в буфер показа БП "нулевого" кадра, т.е. фонового, нейтрального выражения объекта в состоянии ожидания.
- Реализуется временной режим работы модели, поддерживающий показ кадров — ключевых или промежуточных — с частотой 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.)
Рассмотрим параметрическое описание этих отрезков и запишем уравнения для нахождения точки пересечения
.![[P,L]:
\left \{
\begin{array}{l}
\xi = x+k_1(x_L –x) \\
\eta = y + k_1(y_L-y)
\end{array}
\right ,
0\le k_1 \le 1,](/sites/default/files/tex_cache/93886ce05f722761db7f00b3e12522bd.png)
![[A,B]:
\left \{
\begin{array}{l}
\xi = x_A+k_2(x_B –x_A) \\
\eta = y_A + k_2(y_B-y_A)
\end{array}
\right ,
0\le k_2 \le 1.](/sites/default/files/tex_cache/68e3dfeea3e854c15c32689195bc9ac2.png)
Или:

Отсюда

Если отрезки пересекаются, выполняется условие 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 для продолжения работы модели.
